mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Merge pull request #4053 from ethereum/parser-syntax-tests
Move some parser tests to syntax tests
This commit is contained in:
		
						commit
						650244f619
					
				| @ -112,61 +112,6 @@ while(0) | |||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_SUITE(SolidityParser) | BOOST_AUTO_TEST_SUITE(SolidityParser) | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(empty_function) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract test { |  | ||||||
| 		uint256 stateVar; |  | ||||||
| 			function functionName(bytes20 arg1, address addr) constant |  | ||||||
| 				returns (int id) |  | ||||||
| 			{ } |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	BOOST_CHECK(successParse(text)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(no_function_params) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract test { |  | ||||||
| 			uint256 stateVar; |  | ||||||
| 			function functionName() {} |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	BOOST_CHECK(successParse(text)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(single_function_param) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract test { |  | ||||||
| 			uint256 stateVar; |  | ||||||
| 			function functionName(bytes32 input) returns (bytes32 out) {} |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	BOOST_CHECK(successParse(text)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(single_function_param_trailing_comma) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract test { |  | ||||||
| 			function(uint a,) {} |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Unexpected trailing comma in parameter list."); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(single_return_param_trailing_comma) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract test { |  | ||||||
| 			function() returns (uint a,) {} |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Unexpected trailing comma in parameter list."); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(single_modifier_arg_trailing_comma) | BOOST_AUTO_TEST_CASE(single_modifier_arg_trailing_comma) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| @ -241,39 +186,6 @@ BOOST_AUTO_TEST_CASE(function_no_body) | |||||||
| 	BOOST_CHECK(successParse(text)); | 	BOOST_CHECK(successParse(text)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(missing_parameter_name_in_named_args) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract test { |  | ||||||
| 			function a(uint a, uint b, uint c) returns (uint r) { r = a * 100 + b * 10 + c * 1; } |  | ||||||
| 			function b() returns (uint r) { r = a({: 1, : 2, : 3}); } |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected identifier"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(missing_argument_in_named_args) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract test { |  | ||||||
| 			function a(uint a, uint b, uint c) returns (uint r) { r = a * 100 + b * 10 + c * 1; } |  | ||||||
| 			function b() returns (uint r) { r = a({a: , b: , c: }); } |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected primary expression"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(trailing_comma_in_named_args) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract test { |  | ||||||
| 			function a(uint a, uint b, uint c) returns (uint r) { r = a * 100 + b * 10 + c * 1; } |  | ||||||
| 			function b() returns (uint r) { r = a({a: 1, b: 2, c: 3, }); } |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Unexpected trailing comma"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(two_exact_functions) | BOOST_AUTO_TEST_CASE(two_exact_functions) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| @ -557,18 +469,6 @@ BOOST_AUTO_TEST_CASE(variable_definition_with_initialization) | |||||||
| 	BOOST_CHECK(successParse(text)); | 	BOOST_CHECK(successParse(text)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(variable_definition_in_mapping) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract test { |  | ||||||
| 			function fun() { |  | ||||||
| 				mapping(var=>bytes32) d; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected elementary type name for mapping key type"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(operator_expression) | BOOST_AUTO_TEST_CASE(operator_expression) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| @ -849,16 +749,6 @@ BOOST_AUTO_TEST_CASE(modifier) | |||||||
| 	BOOST_CHECK(successParse(text)); | 	BOOST_CHECK(successParse(text)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(modifier_without_semicolon) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract c { |  | ||||||
| 			modifier mod { if (msg.sender == 0) _ } |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected token Semicolon got"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(modifier_arguments) | BOOST_AUTO_TEST_CASE(modifier_arguments) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| @ -918,16 +808,6 @@ BOOST_AUTO_TEST_CASE(event_arguments_indexed) | |||||||
| 	BOOST_CHECK(successParse(text)); | 	BOOST_CHECK(successParse(text)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(event_with_no_argument_list_fails) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract c { |  | ||||||
| 			event e; |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected token LParen got 'Semicolon'"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(visibility_specifiers) | BOOST_AUTO_TEST_CASE(visibility_specifiers) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| @ -1038,24 +918,6 @@ BOOST_AUTO_TEST_CASE(enum_valid_declaration) | |||||||
| 	BOOST_CHECK(successParse(text)); | 	BOOST_CHECK(successParse(text)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(empty_enum_declaration) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract c { |  | ||||||
| 			enum foo { } |  | ||||||
| 		})"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "enum with no members is not allowed"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(malformed_enum_declaration) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract c { |  | ||||||
| 			enum foo { WARNING,} |  | ||||||
| 		})"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected Identifier after"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(external_function) | BOOST_AUTO_TEST_CASE(external_function) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| @ -1065,15 +927,6 @@ BOOST_AUTO_TEST_CASE(external_function) | |||||||
| 	BOOST_CHECK(successParse(text)); | 	BOOST_CHECK(successParse(text)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(external_variable) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract c { |  | ||||||
| 			uint external x; |  | ||||||
| 		})"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected identifier"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(arrays_in_storage) | BOOST_AUTO_TEST_CASE(arrays_in_storage) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| @ -1113,15 +966,6 @@ BOOST_AUTO_TEST_CASE(multi_arrays) | |||||||
| 	BOOST_CHECK(successParse(text)); | 	BOOST_CHECK(successParse(text)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(constant_is_keyword) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract Foo { |  | ||||||
| 			uint constant = 4; |  | ||||||
| 	})"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected identifier"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(keyword_is_reserved) | BOOST_AUTO_TEST_CASE(keyword_is_reserved) | ||||||
| { | { | ||||||
| 	auto keywords = { | 	auto keywords = { | ||||||
| @ -1152,15 +996,6 @@ BOOST_AUTO_TEST_CASE(keyword_is_reserved) | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(var_array) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract Foo { |  | ||||||
| 			function f() { var[] a; } |  | ||||||
| 	})"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected identifier"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(location_specifiers_for_params) | BOOST_AUTO_TEST_CASE(location_specifiers_for_params) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| @ -1184,24 +1019,6 @@ BOOST_AUTO_TEST_CASE(location_specifiers_for_locals) | |||||||
| 	BOOST_CHECK(successParse(text)); | 	BOOST_CHECK(successParse(text)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(location_specifiers_for_state) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract Foo { |  | ||||||
| 			uint[] memory x; |  | ||||||
| 	})"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected identifier"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(location_specifiers_with_var) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract Foo { |  | ||||||
| 			function f() { var memory x; } |  | ||||||
| 	})"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Location specifier needs explicit type name"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(empty_comment) | BOOST_AUTO_TEST_CASE(empty_comment) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| @ -1224,7 +1041,6 @@ BOOST_AUTO_TEST_CASE(comment_end_with_double_star) | |||||||
| 	BOOST_CHECK(successParse(text)); | 	BOOST_CHECK(successParse(text)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(library_simple) | BOOST_AUTO_TEST_CASE(library_simple) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| @ -1235,20 +1051,6 @@ BOOST_AUTO_TEST_CASE(library_simple) | |||||||
| 	BOOST_CHECK(successParse(text)); | 	BOOST_CHECK(successParse(text)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(local_const_variable) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract Foo { |  | ||||||
| 			function localConst() returns (uint ret) |  | ||||||
| 			{ |  | ||||||
| 				uint constant local = 4; |  | ||||||
| 				return local; |  | ||||||
| 			} |  | ||||||
| 	})"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected token Semicolon"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(multi_variable_declaration) | BOOST_AUTO_TEST_CASE(multi_variable_declaration) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| @ -1285,18 +1087,6 @@ BOOST_AUTO_TEST_CASE(tuples) | |||||||
| 	BOOST_CHECK(successParse(text)); | 	BOOST_CHECK(successParse(text)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(tuples_without_commas) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract C { |  | ||||||
| 			function f() { |  | ||||||
| 				var a = (2 2); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected token Comma"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(member_access_parser_ambiguity) | BOOST_AUTO_TEST_CASE(member_access_parser_ambiguity) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| @ -1365,34 +1155,6 @@ BOOST_AUTO_TEST_CASE(inline_array_declaration) | |||||||
| 	BOOST_CHECK(successParse(text)); | 	BOOST_CHECK(successParse(text)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(inline_array_empty_cells_check_lvalue) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract c { |  | ||||||
| 			uint[] a; |  | ||||||
| 			function f() returns (uint) { |  | ||||||
| 				a = [,2,3]; |  | ||||||
| 				return (a[0]); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected expression"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(inline_array_empty_cells_check_without_lvalue) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract c { |  | ||||||
| 			uint[] a; |  | ||||||
| 			function f() returns (uint, uint) { |  | ||||||
| 				return ([3, ,4][0]); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected expression"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(conditional_true_false_literal) | BOOST_AUTO_TEST_CASE(conditional_true_false_literal) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| @ -1520,38 +1282,6 @@ BOOST_AUTO_TEST_CASE(declaring_fixed_literal_variables) | |||||||
| 	BOOST_CHECK(successParse(text)); | 	BOOST_CHECK(successParse(text)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(no_double_radix_in_fixed_literal) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract A { |  | ||||||
| 			fixed40x40 pi = 3.14.15; |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected token Semicolon"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(invalid_fixed_conversion_leading_zeroes_check) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract test { |  | ||||||
| 			function f() { |  | ||||||
| 				fixed a = 1.0x2; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected primary expression"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(payable_accessor) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract test { |  | ||||||
| 			uint payable x; |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected identifier"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(function_type_in_expression) | BOOST_AUTO_TEST_CASE(function_type_in_expression) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| @ -1575,16 +1305,6 @@ BOOST_AUTO_TEST_CASE(function_type_as_storage_variable) | |||||||
| 	BOOST_CHECK(successParse(text)); | 	BOOST_CHECK(successParse(text)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(function_type_as_storage_variable_with_modifiers) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract test { |  | ||||||
| 			function (uint, uint) modifier1() returns (uint) f1; |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected token LBrace"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(function_type_as_storage_variable_with_assignment) | BOOST_AUTO_TEST_CASE(function_type_as_storage_variable_with_assignment) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| @ -1660,20 +1380,6 @@ BOOST_AUTO_TEST_CASE(function_type_state_variable) | |||||||
| 	BOOST_CHECK(successParse(text)); | 	BOOST_CHECK(successParse(text)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(scientific_notation) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract test { |  | ||||||
| 			uint256 a = 2e10; |  | ||||||
| 			uint256 b = 2E10; |  | ||||||
| 			uint256 c = 200e-2; |  | ||||||
| 			uint256 d = 2E10 wei; |  | ||||||
| 			uint256 e = 2.5e10; |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	BOOST_CHECK(successParse(text)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(interface) | BOOST_AUTO_TEST_CASE(interface) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| @ -1684,31 +1390,6 @@ BOOST_AUTO_TEST_CASE(interface) | |||||||
| 	BOOST_CHECK(successParse(text)); | 	BOOST_CHECK(successParse(text)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(newInvalidTypeName) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract C { |  | ||||||
| 			function f() { |  | ||||||
| 				new var; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected explicit type name"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_CASE(emitWithoutEvent) |  | ||||||
| { |  | ||||||
| 	char const* text = R"( |  | ||||||
| 		contract C { |  | ||||||
| 			event A(); |  | ||||||
| 			function f() { |  | ||||||
| 				emit A; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	)"; |  | ||||||
| 	CHECK_PARSE_ERROR(text, "Expected token LParen got 'Semicolon'"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| BOOST_AUTO_TEST_SUITE_END() | BOOST_AUTO_TEST_SUITE_END() | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -0,0 +1,5 @@ | |||||||
|  | contract Foo { | ||||||
|  | 	uint constant = 4; | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (30-30): Expected identifier, got 'Assign' | ||||||
| @ -0,0 +1,8 @@ | |||||||
|  | contract C { | ||||||
|  | 	event A(); | ||||||
|  | 	function f() { | ||||||
|  | 		emit A; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (49-49): Expected token LParen got 'Semicolon' | ||||||
							
								
								
									
										5
									
								
								test/libsolidity/syntaxTests/parsing/empty_enum.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								test/libsolidity/syntaxTests/parsing/empty_enum.sol
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | contract c { | ||||||
|  | 	enum foo { } | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (25-25): enum with no members is not allowed. | ||||||
							
								
								
									
										10
									
								
								test/libsolidity/syntaxTests/parsing/empty_function.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								test/libsolidity/syntaxTests/parsing/empty_function.sol
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | |||||||
|  | contract test { | ||||||
|  | 	uint256 stateVar; | ||||||
|  | 	function functionName(bytes20 arg1, address addr) constant returns (int id) { } | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // Warning: (36-115): No visibility specified. Defaulting to "public".  | ||||||
|  | // Warning: (58-70): Unused function parameter. Remove or comment out the variable name to silence this warning. | ||||||
|  | // Warning: (72-84): Unused function parameter. Remove or comment out the variable name to silence this warning. | ||||||
|  | // Warning: (104-110): Unused function parameter. Remove or comment out the variable name to silence this warning. | ||||||
|  | // Warning: (36-115): Function state mutability can be restricted to pure | ||||||
| @ -0,0 +1,5 @@ | |||||||
|  | contract c { | ||||||
|  | 	event e; | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (21-21): Expected token LParen got 'Semicolon' | ||||||
| @ -0,0 +1,5 @@ | |||||||
|  | contract c { | ||||||
|  | 	uint external x; | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (19-19): Expected identifier, got 'External' | ||||||
| @ -0,0 +1,5 @@ | |||||||
|  | contract A { | ||||||
|  | 	fixed40x40 pi = 3.14.15; | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (34-34): Expected token Semicolon got 'Number' | ||||||
| @ -0,0 +1,5 @@ | |||||||
|  | contract test { | ||||||
|  | 	function (uint, uint) modifier1() returns (uint) f1; | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (66-66): Expected token LBrace got 'Identifier' | ||||||
| @ -0,0 +1,9 @@ | |||||||
|  | contract c { | ||||||
|  | 	uint[] a; | ||||||
|  | 	function f() returns (uint) { | ||||||
|  | 		a = [,2,3]; | ||||||
|  | 		return (a[0]); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (62-62): Expected expression (inline array elements cannot be omitted). | ||||||
| @ -0,0 +1,8 @@ | |||||||
|  | contract c { | ||||||
|  | 	uint[] a; | ||||||
|  | 	function f() returns (uint, uint) { | ||||||
|  | 		return ([3, ,4][0]); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (75-75): Expected expression (inline array elements cannot be omitted). | ||||||
| @ -0,0 +1,7 @@ | |||||||
|  | contract test { | ||||||
|  | 	function f() { | ||||||
|  | 		fixed a = 1.0x2; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (44-44): Expected primary expression. | ||||||
| @ -0,0 +1,9 @@ | |||||||
|  | contract Foo { | ||||||
|  | 	function localConst() returns (uint ret) | ||||||
|  | 	{ | ||||||
|  | 		uint constant local = 4; | ||||||
|  | 		return local; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (67-67): Expected token Semicolon got 'Constant' | ||||||
| @ -0,0 +1,5 @@ | |||||||
|  | contract Foo { | ||||||
|  | 	uint[] memory x; | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (23-23): Expected identifier, got 'Memory' | ||||||
| @ -0,0 +1,5 @@ | |||||||
|  | contract Foo { | ||||||
|  | 	function f() { var memory x; } | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (35-35): Location specifier needs explicit type name. | ||||||
| @ -0,0 +1,5 @@ | |||||||
|  | contract c { | ||||||
|  | 	enum foo { WARNING,} | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (33-33): Expected Identifier after ',' | ||||||
| @ -0,0 +1,6 @@ | |||||||
|  | contract test { | ||||||
|  | 	function a(uint a, uint b, uint c) returns (uint r) { r = a * 100 + b * 10 + c * 1; } | ||||||
|  | 	function b() returns (uint r) { r = a({a: , b: , c: }); } | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (146-146): Expected primary expression. | ||||||
| @ -0,0 +1,6 @@ | |||||||
|  | contract test { | ||||||
|  | 	function a(uint a, uint b, uint c) returns (uint r) { r = a * 100 + b * 10 + c * 1; } | ||||||
|  | 	function b() returns (uint r) { r = a({: 1, : 2, : 3}); } | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (143-143): Expected identifier, got 'Colon' | ||||||
| @ -0,0 +1,5 @@ | |||||||
|  | contract c { | ||||||
|  | 	modifier mod { if (msg.sender == 0) _ } | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (52-52): Expected token Semicolon got 'RBrace' | ||||||
| @ -0,0 +1,7 @@ | |||||||
|  | contract C { | ||||||
|  | 	function f() { | ||||||
|  | 		new var; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (35-35): Expected explicit type name. | ||||||
| @ -0,0 +1,7 @@ | |||||||
|  | contract test { | ||||||
|  | 	uint256 stateVar; | ||||||
|  | 	function functionName() {} | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // Warning: (36-62): No visibility specified. Defaulting to "public".  | ||||||
|  | // Warning: (36-62): Function state mutability can be restricted to pure | ||||||
| @ -0,0 +1,5 @@ | |||||||
|  | contract test { | ||||||
|  | 	uint payable x; | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (22-22): Expected identifier, got 'Payable' | ||||||
| @ -0,0 +1,7 @@ | |||||||
|  | contract test { | ||||||
|  | 	uint256 a = 2e10; | ||||||
|  | 	uint256 b = 2E10; | ||||||
|  | 	uint256 c = 200e-2; | ||||||
|  | 	uint256 d = 2E10 wei; | ||||||
|  | 	uint256 e = 2.5e10; | ||||||
|  | } | ||||||
| @ -0,0 +1,9 @@ | |||||||
|  | contract test { | ||||||
|  | 	uint256 stateVar; | ||||||
|  | 	function functionName(bytes32 input) returns (bytes32 out) {} | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // Warning: (36-97): No visibility specified. Defaulting to "public".  | ||||||
|  | // Warning: (58-71): Unused function parameter. Remove or comment out the variable name to silence this warning. | ||||||
|  | // Warning: (82-93): Unused function parameter. Remove or comment out the variable name to silence this warning. | ||||||
|  | // Warning: (36-97): Function state mutability can be restricted to pure | ||||||
| @ -0,0 +1,5 @@ | |||||||
|  | contract test { | ||||||
|  | 	function(uint a,) {} | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (32-32): Unexpected trailing comma in parameter list. | ||||||
| @ -0,0 +1,5 @@ | |||||||
|  | contract test { | ||||||
|  | 	function() returns (uint a,) {} | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (43-43): Unexpected trailing comma in parameter list. | ||||||
| @ -0,0 +1,6 @@ | |||||||
|  | contract test { | ||||||
|  | 	function a(uint a, uint b, uint c) returns (uint r) { r = a * 100 + b * 10 + c * 1; } | ||||||
|  | 	function b() returns (uint r) { r = a({a: 1, b: 2, c: 3, }); } | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (159-159): Unexpected trailing comma. | ||||||
| @ -0,0 +1,7 @@ | |||||||
|  | contract C { | ||||||
|  | 	function f() { | ||||||
|  | 		var a = (2 2); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (42-42): Expected token Comma got 'Number' | ||||||
							
								
								
									
										5
									
								
								test/libsolidity/syntaxTests/parsing/var_array.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								test/libsolidity/syntaxTests/parsing/var_array.sol
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | contract Foo { | ||||||
|  | 	function f() { var[] a; } | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (34-34): Expected identifier, got 'LBrack' | ||||||
| @ -0,0 +1,7 @@ | |||||||
|  | contract test { | ||||||
|  | 	function fun() { | ||||||
|  | 		mapping(var=>bytes32) d; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | // ---- | ||||||
|  | // ParserError: (44-44): Expected elementary type name for mapping key type | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user