diff options
author | chriseth <c@ethdev.com> | 2015-06-01 18:32:59 +0800 |
---|---|---|
committer | chriseth <c@ethdev.com> | 2015-06-05 23:34:26 +0800 |
commit | 88096c2c694983da327fd0fc46c31dc6f7404f73 (patch) | |
tree | fb84765bb8ab726354bf9c4d44d152008ec2c530 /Assembly.h | |
parent | d309c3c76827606c4cabd5660035df394a16b601 (diff) | |
download | dexon-solidity-88096c2c694983da327fd0fc46c31dc6f7404f73.tar dexon-solidity-88096c2c694983da327fd0fc46c31dc6f7404f73.tar.gz dexon-solidity-88096c2c694983da327fd0fc46c31dc6f7404f73.tar.bz2 dexon-solidity-88096c2c694983da327fd0fc46c31dc6f7404f73.tar.lz dexon-solidity-88096c2c694983da327fd0fc46c31dc6f7404f73.tar.xz dexon-solidity-88096c2c694983da327fd0fc46c31dc6f7404f73.tar.zst dexon-solidity-88096c2c694983da327fd0fc46c31dc6f7404f73.zip |
Compute constants
Diffstat (limited to 'Assembly.h')
-rw-r--r-- | Assembly.h | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -49,6 +49,7 @@ public: AssemblyItem newPushTag() { return AssemblyItem(PushTag, m_usedTags++); } AssemblyItem newData(bytes const& _data) { h256 h = (u256)std::hash<std::string>()(asString(_data)); m_data[h] = _data; return AssemblyItem(PushData, h); } AssemblyItem newSub(Assembly const& _sub) { m_subs.push_back(_sub); return AssemblyItem(PushSub, m_subs.size() - 1); } + Assembly const& getSub(size_t _sub) const { return m_subs.at(_sub); } AssemblyItem newPushString(std::string const& _data) { h256 h = (u256)std::hash<std::string>()(_data); m_strings[h] = _data; return AssemblyItem(PushString, h); } AssemblyItem newPushSubSize(u256 const& _subId) { return AssemblyItem(PushSubSize, _subId); } @@ -92,7 +93,13 @@ public: void setSourceLocation(SourceLocation const& _location) { m_currentSourceLocation = _location; } bytes assemble() const; - Assembly& optimise(bool _enable); + bytes const& data(h256 const& _i) const { return m_data[_i]; } + + /// Modify (if @a _enable is set) and return the current assembly such that creation and + /// execution gas usage is optimised. @a _isCreation should be true for the top-level assembly. + /// @a _runs specifes an estimate on how often each opcode in this assembly will be executed, + /// i.e. use a small value to optimise for size and a large value to optimise for runtime. + Assembly& optimise(bool _enable, bool _isCreation = true, size_t _runs = 200); Json::Value stream( std::ostream& _out, std::string const& _prefix = "", |