diff options
author | chriseth <chris@ethereum.org> | 2017-02-17 03:12:31 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-17 03:12:31 +0800 |
commit | 7bdc4ddab2be7990d09f102606f788f054da41db (patch) | |
tree | aadf29b475d77125da7101eeebaba7a4c6d8638a /libsolidity/inlineasm/AsmPrinter.cpp | |
parent | 0ad8e53404514413761b198f42424cb2c1989b9a (diff) | |
parent | 01fcd989b57d31fa8fc63720401ffc77698ee57b (diff) | |
download | dexon-solidity-7bdc4ddab2be7990d09f102606f788f054da41db.tar dexon-solidity-7bdc4ddab2be7990d09f102606f788f054da41db.tar.gz dexon-solidity-7bdc4ddab2be7990d09f102606f788f054da41db.tar.bz2 dexon-solidity-7bdc4ddab2be7990d09f102606f788f054da41db.tar.lz dexon-solidity-7bdc4ddab2be7990d09f102606f788f054da41db.tar.xz dexon-solidity-7bdc4ddab2be7990d09f102606f788f054da41db.tar.zst dexon-solidity-7bdc4ddab2be7990d09f102606f788f054da41db.zip |
Merge pull request #1627 from ethereum/asmfunctions
Parsing assembly function definitions and calls.
Diffstat (limited to 'libsolidity/inlineasm/AsmPrinter.cpp')
-rw-r--r-- | libsolidity/inlineasm/AsmPrinter.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/libsolidity/inlineasm/AsmPrinter.cpp b/libsolidity/inlineasm/AsmPrinter.cpp index ab2a03ff..a70b0b78 100644 --- a/libsolidity/inlineasm/AsmPrinter.cpp +++ b/libsolidity/inlineasm/AsmPrinter.cpp @@ -112,6 +112,24 @@ string AsmPrinter::operator()(assembly::VariableDeclaration const& _variableDecl return "let " + _variableDeclaration.name + " := " + boost::apply_visitor(*this, *_variableDeclaration.value); } +string AsmPrinter::operator()(assembly::FunctionDefinition const& _functionDefinition) +{ + string out = "function " + _functionDefinition.name + "(" + boost::algorithm::join(_functionDefinition.arguments, ", ") + ")"; + if (!_functionDefinition.returns.empty()) + out += " -> (" + boost::algorithm::join(_functionDefinition.returns, ", ") + ")"; + return out + "\n" + (*this)(_functionDefinition.body); +} + +string AsmPrinter::operator()(assembly::FunctionCall const& _functionCall) +{ + return + (*this)(_functionCall.functionName) + "(" + + boost::algorithm::join( + _functionCall.arguments | boost::adaptors::transformed(boost::apply_visitor(*this)), + ", " ) + + ")"; +} + string AsmPrinter::operator()(Block const& _block) { if (_block.statements.empty()) |