diff --git a/test/liblangutil/Scanner.cpp b/test/liblangutil/Scanner.cpp index bbdf2a469..6aca4c849 100644 --- a/test/liblangutil/Scanner.cpp +++ b/test/liblangutil/Scanner.cpp @@ -771,6 +771,74 @@ BOOST_AUTO_TEST_CASE(irregular_line_breaks_in_strings) } } +BOOST_AUTO_TEST_CASE(yul_function) +{ + string sig = "function f(a, b) -> x, y"; + Scanner scanner(CharStream(sig, "")); + BOOST_CHECK_EQUAL(scanner.currentToken(), Token::Function); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::LParen); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::Comma); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::RParen); + BOOST_CHECK_EQUAL(scanner.next(), Token::Sub); + BOOST_CHECK_EQUAL(scanner.next(), Token::GreaterThan); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::Comma); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::EOS); + scanner.reset(CharStream(sig, "")); + scanner.setScannerMode(ScannerKind::Yul); + BOOST_CHECK_EQUAL(scanner.currentToken(), Token::Function); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::LParen); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::Comma); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::RParen); + BOOST_CHECK_EQUAL(scanner.next(), Token::Sub); + BOOST_CHECK_EQUAL(scanner.next(), Token::GreaterThan); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::Comma); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::EOS); +} + +BOOST_AUTO_TEST_CASE(yul_function_with_whitespace) +{ + string sig = "function f (a, b) - > x, y"; + Scanner scanner(CharStream(sig, "")); + BOOST_CHECK_EQUAL(scanner.currentToken(), Token::Function); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::LParen); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::Comma); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::RParen); + BOOST_CHECK_EQUAL(scanner.next(), Token::Sub); + BOOST_CHECK_EQUAL(scanner.next(), Token::GreaterThan); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::Comma); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::EOS); + scanner.reset(CharStream(sig, "")); + scanner.setScannerMode(ScannerKind::Yul); + BOOST_CHECK_EQUAL(scanner.currentToken(), Token::Function); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::LParen); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::Comma); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::RParen); + BOOST_CHECK_EQUAL(scanner.next(), Token::Sub); + BOOST_CHECK_EQUAL(scanner.next(), Token::GreaterThan); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::Comma); + BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier); + BOOST_CHECK_EQUAL(scanner.next(), Token::EOS); +} + BOOST_AUTO_TEST_SUITE_END() } // end namespaces diff --git a/test/libsolidity/semanticTests/inlineAssembly/inline_assembly_embedded_function_call.sol b/test/libsolidity/semanticTests/inlineAssembly/inline_assembly_embedded_function_call.sol index 3d31c1add..98a6039d5 100644 --- a/test/libsolidity/semanticTests/inlineAssembly/inline_assembly_embedded_function_call.sol +++ b/test/libsolidity/semanticTests/inlineAssembly/inline_assembly_embedded_function_call.sol @@ -3,7 +3,7 @@ contract C { assembly { let d:= 0x10 - function asmfun(a, b, c) - > x, y, z { + function asmfun(a, b, c) -> x, y, z { x := g(a) function g(r) - > s { s := mul(r, r) diff --git a/test/libsolidity/semanticTests/inlineAssembly/inline_assembly_function_call.sol b/test/libsolidity/semanticTests/inlineAssembly/inline_assembly_function_call.sol index 17a271d5b..386db6244 100644 --- a/test/libsolidity/semanticTests/inlineAssembly/inline_assembly_function_call.sol +++ b/test/libsolidity/semanticTests/inlineAssembly/inline_assembly_function_call.sol @@ -1,7 +1,7 @@ contract C { function f() public { assembly { - function asmfun(a, b, c) - > x, y, z { + function asmfun(a, b, c) -> x, y, z { x := a y := b z := 7 diff --git a/test/libsolidity/semanticTests/inlineAssembly/inline_assembly_function_call2.sol b/test/libsolidity/semanticTests/inlineAssembly/inline_assembly_function_call2.sol index 26d3d43b7..1cbc510b9 100644 --- a/test/libsolidity/semanticTests/inlineAssembly/inline_assembly_function_call2.sol +++ b/test/libsolidity/semanticTests/inlineAssembly/inline_assembly_function_call2.sol @@ -3,7 +3,7 @@ contract C { assembly { let d := 0x10 - function asmfun(a, b, c) - > x, y, z { + function asmfun(a, b, c) -> x, y, z { x := a y := b z := 7 diff --git a/test/libsolidity/semanticTests/inlineAssembly/inline_assembly_function_call_assignment.sol b/test/libsolidity/semanticTests/inlineAssembly/inline_assembly_function_call_assignment.sol index 2dec9761b..77d28fd4b 100644 --- a/test/libsolidity/semanticTests/inlineAssembly/inline_assembly_function_call_assignment.sol +++ b/test/libsolidity/semanticTests/inlineAssembly/inline_assembly_function_call_assignment.sol @@ -3,7 +3,7 @@ contract C { assembly { let a1, b1, c1 - function asmfun(a, b, c) - > x, y, z { + function asmfun(a, b, c) -> x, y, z { x := a y := b z := 7 diff --git a/test/libsolidity/syntaxTests/inlineAssembly/function_definition.sol b/test/libsolidity/syntaxTests/inlineAssembly/function_definition.sol new file mode 100644 index 000000000..c842060ff --- /dev/null +++ b/test/libsolidity/syntaxTests/inlineAssembly/function_definition.sol @@ -0,0 +1,8 @@ +contract C { + function f() pure public { + assembly { + function f (a, b , c ) -> y,x,z { + } + } + } +} \ No newline at end of file diff --git a/test/libsolidity/syntaxTests/inlineAssembly/function_definition_whitespace.sol b/test/libsolidity/syntaxTests/inlineAssembly/function_definition_whitespace.sol new file mode 100644 index 000000000..d336c2325 --- /dev/null +++ b/test/libsolidity/syntaxTests/inlineAssembly/function_definition_whitespace.sol @@ -0,0 +1,8 @@ +contract C { + function f() pure public { + assembly { + function f (a, b , c ) - > y,x,z { + } + } + } +} \ No newline at end of file diff --git a/test/libyul/yulSyntaxTests/function_definition.yul b/test/libyul/yulSyntaxTests/function_definition.yul new file mode 100644 index 000000000..9cd21193e --- /dev/null +++ b/test/libyul/yulSyntaxTests/function_definition.yul @@ -0,0 +1,4 @@ +{ + function f (a, b , c ) -> y,x,z { + } +} \ No newline at end of file diff --git a/test/libyul/yulSyntaxTests/function_definition_whitespace.yul b/test/libyul/yulSyntaxTests/function_definition_whitespace.yul new file mode 100644 index 000000000..fc1035507 --- /dev/null +++ b/test/libyul/yulSyntaxTests/function_definition_whitespace.yul @@ -0,0 +1,4 @@ +{ + function f (a, b , c ) - > y,x,z { + } +} \ No newline at end of file