Add/Update tests for Yul function definition

This commit is contained in:
Alex Beregszaszi 2020-08-12 23:28:19 +01:00
parent e68d16d8e0
commit bb29307b02
9 changed files with 96 additions and 4 deletions

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,8 @@
contract C {
function f() pure public {
assembly {
function f (a, b , c ) -> y,x,z {
}
}
}
}

View File

@ -0,0 +1,8 @@
contract C {
function f() pure public {
assembly {
function f (a, b , c ) - > y,x,z {
}
}
}
}

View File

@ -0,0 +1,4 @@
{
function f (a, b , c ) -> y,x,z {
}
}

View File

@ -0,0 +1,4 @@
{
function f (a, b , c ) - > y,x,z {
}
}