From 55f9eab51f25b30ffb0fa263ac7a6072472ad0cf Mon Sep 17 00:00:00 2001 From: Christian Parpart Date: Mon, 19 Oct 2020 15:42:47 +0200 Subject: [PATCH] InlineAssembly: Extracting tests for function definition and calls. --- test/libsolidity/InlineAssembly.cpp | 43 ------------------- .../yulSyntaxTests/function_calls_2.yul | 17 ++++++++ .../function_def_multiple_args.yul | 4 ++ .../yulSyntaxTests/function_definition.yul | 5 ++- .../yulSyntaxTests/function_embedded.yul | 7 +++ .../functions_in_parallel_scopes.yul | 4 ++ 6 files changed, 36 insertions(+), 44 deletions(-) create mode 100644 test/libyul/yulSyntaxTests/function_calls_2.yul create mode 100644 test/libyul/yulSyntaxTests/function_def_multiple_args.yul create mode 100644 test/libyul/yulSyntaxTests/function_embedded.yul create mode 100644 test/libyul/yulSyntaxTests/functions_in_parallel_scopes.yul diff --git a/test/libsolidity/InlineAssembly.cpp b/test/libsolidity/InlineAssembly.cpp index f77368ce8..9fa43e8e2 100644 --- a/test/libsolidity/InlineAssembly.cpp +++ b/test/libsolidity/InlineAssembly.cpp @@ -217,21 +217,6 @@ BOOST_AUTO_TEST_CASE(number_literals) CHECK_STRICT_ERROR("{ let x := 0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff }", TypeError, "Number literal too large (> 256 bits)"); } -BOOST_AUTO_TEST_CASE(function_definitions) -{ - 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_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_AUTO_TEST_CASE(opcode_for_functions) { CHECK_PARSE_ERROR("{ function gas() { } }", ParserError, "Cannot use builtin"); @@ -267,11 +252,6 @@ BOOST_AUTO_TEST_CASE(name_clashes_function_variable_subscope_reverse) { CHECK_PARSE_ERROR("{ { let g := 0 } function g() { } }", DeclarationError, "Variable name g already taken in this scope"); } -BOOST_AUTO_TEST_CASE(functions_in_parallel_scopes) -{ - BOOST_CHECK(successParse("{ { function g() {} } { function g() {} } }")); -} - BOOST_AUTO_TEST_CASE(variable_access_cross_functions) { CHECK_PARSE_ERROR("{ let x := 2 function g() { pop(x) } }", DeclarationError, "Identifier not found."); @@ -454,29 +434,6 @@ BOOST_AUTO_TEST_CASE(revert) BOOST_CHECK(successAssemble("{ revert(0, 0) }")); } -BOOST_AUTO_TEST_CASE(function_calls) -{ - BOOST_CHECK(successAssemble("{ function f() {} }")); - BOOST_CHECK(successAssemble("{ function f() { let y := 2 } }")); - BOOST_CHECK(successAssemble("{ function f() -> z { let y := 2 } }")); - BOOST_CHECK(successAssemble("{ function f(a) { let y := 2 } }")); - BOOST_CHECK(successAssemble("{ function f(a) { let y := a } }")); - BOOST_CHECK(successAssemble("{ function f() -> x, y, z {} }")); - BOOST_CHECK(successAssemble("{ function f(x, y, z) {} }")); - BOOST_CHECK(successAssemble("{ function f(a, b) -> x, y, z { y := a } }")); - BOOST_CHECK(successAssemble("{ function f() {} f() }")); - BOOST_CHECK(successAssemble("{ function f() -> x, y { x := 1 y := 2} let a, b := f() }")); - BOOST_CHECK(successAssemble("{ function f(a, b) -> x, y { x := b y := a } let a, b := f(2, 3) }")); - BOOST_CHECK(successAssemble("{ function rec(a) { rec(sub(a, 1)) } rec(2) }")); - BOOST_CHECK(successAssemble("{ let r := 2 function f() -> x, y { x := 1 y := 2} let a, b := f() b := r }")); - BOOST_CHECK(successAssemble("{ function f() { g() } function g() { f() } }")); -} - -BOOST_AUTO_TEST_CASE(embedded_functions) -{ - BOOST_CHECK(successAssemble("{ function f(r, s) -> x { function g(a) -> b { } x := g(2) } let x := f(2, 3) }")); -} - BOOST_AUTO_TEST_CASE(large_constant) { auto source = R"({ diff --git a/test/libyul/yulSyntaxTests/function_calls_2.yul b/test/libyul/yulSyntaxTests/function_calls_2.yul new file mode 100644 index 000000000..d50c27a72 --- /dev/null +++ b/test/libyul/yulSyntaxTests/function_calls_2.yul @@ -0,0 +1,17 @@ +{ + { function f() {} } + { function f() { let y := 2 } } + { function f() -> z { let y := 2 } } + { function f(a) { let y := 2 } } + { function f(a) { let y := a } } + { function f() -> x, y, z {} } + { function f(x, y, z) {} } + { function f(a, b) -> x, y, z { y := a } } + { function f() {} f() } + { function f() -> x, y { x := 1 y := 2} let a, b := f() } + { function f(a, b) -> x, y { x := b y := a } let a, b := f(2, 3) } + { function rec(a) { rec(sub(a, 1)) } rec(2) } + { let r := 2 function f() -> x, y { x := 1 y := 2} let a, b := f() b := r } + { function f() { g() } function g() { f() } } + { function f(a) -> b {} function g(a, b, c) {} function x() { g(1, 2, f(mul(2, 3))) x() } } +} diff --git a/test/libyul/yulSyntaxTests/function_def_multiple_args.yul b/test/libyul/yulSyntaxTests/function_def_multiple_args.yul new file mode 100644 index 000000000..5d526559f --- /dev/null +++ b/test/libyul/yulSyntaxTests/function_def_multiple_args.yul @@ -0,0 +1,4 @@ +{ + function f(a, d) { } + function g(a, d) -> x, y { } +} diff --git a/test/libyul/yulSyntaxTests/function_definition.yul b/test/libyul/yulSyntaxTests/function_definition.yul index 9cd21193e..1323e7620 100644 --- a/test/libyul/yulSyntaxTests/function_definition.yul +++ b/test/libyul/yulSyntaxTests/function_definition.yul @@ -1,4 +1,7 @@ { function f (a, b , c ) -> y,x,z { } -} \ No newline at end of file + + function g() { } + function h(a) -> x { } +} diff --git a/test/libyul/yulSyntaxTests/function_embedded.yul b/test/libyul/yulSyntaxTests/function_embedded.yul new file mode 100644 index 000000000..e836da2b4 --- /dev/null +++ b/test/libyul/yulSyntaxTests/function_embedded.yul @@ -0,0 +1,7 @@ +{ + function f(r, s) -> x { + function g(a) -> b { } + x := g(2) + } + let x := f(2, 3) +} diff --git a/test/libyul/yulSyntaxTests/functions_in_parallel_scopes.yul b/test/libyul/yulSyntaxTests/functions_in_parallel_scopes.yul new file mode 100644 index 000000000..05f3a2861 --- /dev/null +++ b/test/libyul/yulSyntaxTests/functions_in_parallel_scopes.yul @@ -0,0 +1,4 @@ +{ + { function g() {} } + { function g() {} } +}