mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Merge pull request #9613 from ethereum/yul-function-arrow
Add/Update tests for Yul function definition
This commit is contained in:
		
						commit
						ce501d6740
					
				@ -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
 | 
			
		||||
 | 
			
		||||
@ -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)
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,8 @@
 | 
			
		||||
contract C {
 | 
			
		||||
  function f() pure public {
 | 
			
		||||
    assembly {
 | 
			
		||||
      function f (a, b  , c ) ->    y,x,z {
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,8 @@
 | 
			
		||||
contract C {
 | 
			
		||||
  function f() pure public {
 | 
			
		||||
    assembly {
 | 
			
		||||
      function f (a, b  , c ) -     >    y,x,z {
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										4
									
								
								test/libyul/yulSyntaxTests/function_definition.yul
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								test/libyul/yulSyntaxTests/function_definition.yul
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
			
		||||
{
 | 
			
		||||
    function f (a, b  , c ) ->    y,x,z {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,4 @@
 | 
			
		||||
{
 | 
			
		||||
    function f (a, b  , c ) -     >    y,x,z {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user