aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/inlineasm/AsmPrinter.cpp
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2017-02-17 03:12:31 +0800
committerGitHub <noreply@github.com>2017-02-17 03:12:31 +0800
commit7bdc4ddab2be7990d09f102606f788f054da41db (patch)
treeaadf29b475d77125da7101eeebaba7a4c6d8638a /libsolidity/inlineasm/AsmPrinter.cpp
parent0ad8e53404514413761b198f42424cb2c1989b9a (diff)
parent01fcd989b57d31fa8fc63720401ffc77698ee57b (diff)
downloaddexon-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.cpp18
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())