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_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)
|
||||
{
|
||||
char const* text = R"(
|
||||
@ -241,39 +186,6 @@ BOOST_AUTO_TEST_CASE(function_no_body)
|
||||
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)
|
||||
{
|
||||
char const* text = R"(
|
||||
@ -557,18 +469,6 @@ BOOST_AUTO_TEST_CASE(variable_definition_with_initialization)
|
||||
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)
|
||||
{
|
||||
char const* text = R"(
|
||||
@ -849,16 +749,6 @@ BOOST_AUTO_TEST_CASE(modifier)
|
||||
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)
|
||||
{
|
||||
char const* text = R"(
|
||||
@ -918,16 +808,6 @@ BOOST_AUTO_TEST_CASE(event_arguments_indexed)
|
||||
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)
|
||||
{
|
||||
char const* text = R"(
|
||||
@ -1038,24 +918,6 @@ BOOST_AUTO_TEST_CASE(enum_valid_declaration)
|
||||
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)
|
||||
{
|
||||
char const* text = R"(
|
||||
@ -1065,15 +927,6 @@ BOOST_AUTO_TEST_CASE(external_function)
|
||||
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)
|
||||
{
|
||||
char const* text = R"(
|
||||
@ -1113,15 +966,6 @@ BOOST_AUTO_TEST_CASE(multi_arrays)
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
char const* text = R"(
|
||||
@ -1184,24 +1019,6 @@ BOOST_AUTO_TEST_CASE(location_specifiers_for_locals)
|
||||
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)
|
||||
{
|
||||
char const* text = R"(
|
||||
@ -1224,7 +1041,6 @@ BOOST_AUTO_TEST_CASE(comment_end_with_double_star)
|
||||
BOOST_CHECK(successParse(text));
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(library_simple)
|
||||
{
|
||||
char const* text = R"(
|
||||
@ -1235,20 +1051,6 @@ BOOST_AUTO_TEST_CASE(library_simple)
|
||||
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)
|
||||
{
|
||||
char const* text = R"(
|
||||
@ -1285,18 +1087,6 @@ BOOST_AUTO_TEST_CASE(tuples)
|
||||
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)
|
||||
{
|
||||
char const* text = R"(
|
||||
@ -1365,34 +1155,6 @@ BOOST_AUTO_TEST_CASE(inline_array_declaration)
|
||||
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)
|
||||
{
|
||||
char const* text = R"(
|
||||
@ -1520,38 +1282,6 @@ BOOST_AUTO_TEST_CASE(declaring_fixed_literal_variables)
|
||||
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)
|
||||
{
|
||||
char const* text = R"(
|
||||
@ -1575,16 +1305,6 @@ BOOST_AUTO_TEST_CASE(function_type_as_storage_variable)
|
||||
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)
|
||||
{
|
||||
char const* text = R"(
|
||||
@ -1660,20 +1380,6 @@ BOOST_AUTO_TEST_CASE(function_type_state_variable)
|
||||
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)
|
||||
{
|
||||
char const* text = R"(
|
||||
@ -1684,31 +1390,6 @@ BOOST_AUTO_TEST_CASE(interface)
|
||||
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()
|
||||
|
||||
}
|
||||
|
@ -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