diff options
-rw-r--r-- | docs/assembly.rst | 8 | ||||
-rw-r--r-- | libsolidity/inlineasm/AsmParser.cpp | 4 | ||||
-rw-r--r-- | libsolidity/inlineasm/AsmPrinter.cpp | 2 | ||||
-rw-r--r-- | test/libsolidity/InlineAssembly.cpp | 12 |
4 files changed, 12 insertions, 14 deletions
diff --git a/docs/assembly.rst b/docs/assembly.rst index eb1bf276..420cea17 100644 --- a/docs/assembly.rst +++ b/docs/assembly.rst @@ -29,7 +29,7 @@ arising when writing manual assembly by the following features: * labels: ``let x := 10 repeat: x := sub(x, 1) jumpi(repeat, eq(x, 0))`` * loops: ``for { let i := 0 } lt(i, x) { i := add(i, 1) } { y := mul(2, y) }`` * switch statements: ``switch x case 0: { y := mul(x, 2) } default: { y := 0 }`` -* function calls: ``function f(x) -> (y) { switch x case 0: { y := 1 } default: { y := mul(x, f(sub(x, 1))) } }`` +* function calls: ``function f(x) -> y { switch x case 0: { y := 1 } default: { y := mul(x, f(sub(x, 1))) } }`` .. note:: Of the above, loops, function calls and switch statements are not yet implemented. @@ -566,7 +566,7 @@ The following example implements the power function by square-and-multiply. .. code:: assembly { - function power(base, exponent) -> (result) { + function power(base, exponent) -> result { switch exponent 0: { result := 1 } 1: { result := base } @@ -701,12 +701,12 @@ The following assembly will be generated:: } default: { jump(invalidJumpLabel) } // memory allocator - function $allocate(size) -> (pos) { + function $allocate(size) -> pos { pos := mload(0x40) mstore(0x40, add(pos, size)) } // the contract function - function f(x) -> (y) { + function f(x) -> y { y := 1 for { let i := 0 } lt(i, x) { i := add(i, 1) } { y := mul(2, y) diff --git a/libsolidity/inlineasm/AsmParser.cpp b/libsolidity/inlineasm/AsmParser.cpp index 0fc0a34f..9513cf77 100644 --- a/libsolidity/inlineasm/AsmParser.cpp +++ b/libsolidity/inlineasm/AsmParser.cpp @@ -242,15 +242,13 @@ assembly::FunctionDefinition Parser::parseFunctionDefinition() { expectToken(Token::Sub); expectToken(Token::GreaterThan); - expectToken(Token::LParen); while (true) { funDef.returns.push_back(expectAsmIdentifier()); - if (m_scanner->currentToken() == Token::RParen) + if (m_scanner->currentToken() == Token::LBrace) break; expectToken(Token::Comma); } - expectToken(Token::RParen); } funDef.body = parseBlock(); funDef.location.end = funDef.body.location.end; diff --git a/libsolidity/inlineasm/AsmPrinter.cpp b/libsolidity/inlineasm/AsmPrinter.cpp index a70b0b78..252e91f9 100644 --- a/libsolidity/inlineasm/AsmPrinter.cpp +++ b/libsolidity/inlineasm/AsmPrinter.cpp @@ -116,7 +116,7 @@ string AsmPrinter::operator()(assembly::FunctionDefinition const& _functionDefin { string out = "function " + _functionDefinition.name + "(" + boost::algorithm::join(_functionDefinition.arguments, ", ") + ")"; if (!_functionDefinition.returns.empty()) - out += " -> (" + boost::algorithm::join(_functionDefinition.returns, ", ") + ")"; + out += " -> " + boost::algorithm::join(_functionDefinition.returns, ", "); return out + "\n" + (*this)(_functionDefinition.body); } diff --git a/test/libsolidity/InlineAssembly.cpp b/test/libsolidity/InlineAssembly.cpp index 0e9b640a..8bf4df8e 100644 --- a/test/libsolidity/InlineAssembly.cpp +++ b/test/libsolidity/InlineAssembly.cpp @@ -209,17 +209,17 @@ BOOST_AUTO_TEST_CASE(blocks) BOOST_AUTO_TEST_CASE(function_definitions) { - BOOST_CHECK(successParse("{ function f() { } function g(a) -> (x) { } }")); + BOOST_CHECK(successParse("{ function f() { } function g(a) -> x { } }")); } BOOST_AUTO_TEST_CASE(function_definitions_multiple_args) { - BOOST_CHECK(successParse("{ function f(a, d) { } function g(a, d) -> (x, y) { } }")); + BOOST_CHECK(successParse("{ function f(a, d) { } function g(a, d) -> x, y { } }")); } BOOST_AUTO_TEST_CASE(function_calls) { - BOOST_CHECK(successParse("{ function f(a) -> (b) {} function g(a, b, c) {} function x() { g(1, 2, f(mul(2, 3))) x() } }")); + BOOST_CHECK(successParse("{ function f(a) -> b {} function g(a, b, c) {} function x() { g(1, 2, f(mul(2, 3))) x() } }")); } BOOST_AUTO_TEST_CASE(opcode_for_functions) @@ -230,7 +230,7 @@ BOOST_AUTO_TEST_CASE(opcode_for_functions) BOOST_AUTO_TEST_CASE(opcode_for_function_args) { CHECK_PARSE_ERROR("{ function f(gas) { } }", ParserError, "Cannot use instruction names for identifier names."); - CHECK_PARSE_ERROR("{ function f() -> (gas) { } }", ParserError, "Cannot use instruction names for identifier names."); + CHECK_PARSE_ERROR("{ function f() -> gas { } }", ParserError, "Cannot use instruction names for identifier names."); } BOOST_AUTO_TEST_CASE(name_clashes) @@ -295,7 +295,7 @@ BOOST_AUTO_TEST_CASE(print_string_literal_unicode) BOOST_AUTO_TEST_CASE(function_definitions_multiple_args) { - parsePrintCompare("{\n function f(a, d)\n {\n mstore(a, d)\n }\n function g(a, d) -> (x, y)\n {\n }\n}"); + parsePrintCompare("{\n function f(a, d)\n {\n mstore(a, d)\n }\n function g(a, d) -> x, y\n {\n }\n}"); } BOOST_AUTO_TEST_CASE(function_calls) @@ -304,7 +304,7 @@ BOOST_AUTO_TEST_CASE(function_calls) function y() { } - function f(a) -> (b) + function f(a) -> b { } function g(a, b, c) |