aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-05-03 14:35:00 +0800
committerGitHub <noreply@github.com>2018-05-03 14:35:00 +0800
commit650244f61986ea889dbe0a82a5c9d6ab91ffab5b (patch)
tree2010208e15fee4c34fac10fc1ee4eba2cd4a4108 /test
parent72c3b3a2422b5f1b1ca80736a84fd88d44da4c47 (diff)
parent07e765a2f1105343ef495fafeb6faa6cf0fefd18 (diff)
downloaddexon-solidity-650244f61986ea889dbe0a82a5c9d6ab91ffab5b.tar.gz
dexon-solidity-650244f61986ea889dbe0a82a5c9d6ab91ffab5b.tar.zst
dexon-solidity-650244f61986ea889dbe0a82a5c9d6ab91ffab5b.zip
Merge pull request #4053 from ethereum/parser-syntax-tests
Move some parser tests to syntax tests
Diffstat (limited to 'test')
-rw-r--r--test/libsolidity/SolidityParser.cpp319
-rw-r--r--test/libsolidity/syntaxTests/parsing/constant_is_keyword.sol5
-rw-r--r--test/libsolidity/syntaxTests/parsing/emit_without_event.sol8
-rw-r--r--test/libsolidity/syntaxTests/parsing/empty_enum.sol5
-rw-r--r--test/libsolidity/syntaxTests/parsing/empty_function.sol10
-rw-r--r--test/libsolidity/syntaxTests/parsing/event_with_no_argument_list.sol5
-rw-r--r--test/libsolidity/syntaxTests/parsing/external_variable.sol5
-rw-r--r--test/libsolidity/syntaxTests/parsing/fixed_literal_with_double_radix.sol5
-rw-r--r--test/libsolidity/syntaxTests/parsing/function_type_as_storage_variable_with_modifiers.sol5
-rw-r--r--test/libsolidity/syntaxTests/parsing/inline_array_empty_cells_check_lvalue.sol9
-rw-r--r--test/libsolidity/syntaxTests/parsing/inline_array_empty_cells_check_without_lvalue.sol8
-rw-r--r--test/libsolidity/syntaxTests/parsing/invalid_fixed_conversion_leading_zeroes_check.sol7
-rw-r--r--test/libsolidity/syntaxTests/parsing/local_const_variable.sol9
-rw-r--r--test/libsolidity/syntaxTests/parsing/location_specifiers_for_state_variables.sol5
-rw-r--r--test/libsolidity/syntaxTests/parsing/location_specifiers_with_var.sol5
-rw-r--r--test/libsolidity/syntaxTests/parsing/malformed_enum_declaration.sol5
-rw-r--r--test/libsolidity/syntaxTests/parsing/missing_argument_in_named_args.sol6
-rw-r--r--test/libsolidity/syntaxTests/parsing/missing_parameter_name_in_named_args.sol6
-rw-r--r--test/libsolidity/syntaxTests/parsing/modifier_without_semicolon.sol5
-rw-r--r--test/libsolidity/syntaxTests/parsing/new_invalid_type_name.sol7
-rw-r--r--test/libsolidity/syntaxTests/parsing/no_function_params.sol7
-rw-r--r--test/libsolidity/syntaxTests/parsing/payable_accessor.sol5
-rw-r--r--test/libsolidity/syntaxTests/parsing/scientific_notation.sol7
-rw-r--r--test/libsolidity/syntaxTests/parsing/single_function_param.sol9
-rw-r--r--test/libsolidity/syntaxTests/parsing/single_function_param_trailing_comma.sol5
-rw-r--r--test/libsolidity/syntaxTests/parsing/single_return_param_trailing_comma.sol5
-rw-r--r--test/libsolidity/syntaxTests/parsing/trailing_comma_in_named_args.sol6
-rw-r--r--test/libsolidity/syntaxTests/parsing/tuples_without_commas.sol7
-rw-r--r--test/libsolidity/syntaxTests/parsing/var_array.sol5
-rw-r--r--test/libsolidity/syntaxTests/parsing/variable_definition_in_mapping.sol7
30 files changed, 183 insertions, 319 deletions
diff --git a/test/libsolidity/SolidityParser.cpp b/test/libsolidity/SolidityParser.cpp
index 100b3662..1ebf8010 100644
--- a/test/libsolidity/SolidityParser.cpp
+++ b/test/libsolidity/SolidityParser.cpp
@@ -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()
}
diff --git a/test/libsolidity/syntaxTests/parsing/constant_is_keyword.sol b/test/libsolidity/syntaxTests/parsing/constant_is_keyword.sol
new file mode 100644
index 00000000..40e237d2
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/constant_is_keyword.sol
@@ -0,0 +1,5 @@
+contract Foo {
+ uint constant = 4;
+}
+// ----
+// ParserError: (30-30): Expected identifier, got 'Assign'
diff --git a/test/libsolidity/syntaxTests/parsing/emit_without_event.sol b/test/libsolidity/syntaxTests/parsing/emit_without_event.sol
new file mode 100644
index 00000000..5916fc2b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/emit_without_event.sol
@@ -0,0 +1,8 @@
+contract C {
+ event A();
+ function f() {
+ emit A;
+ }
+}
+// ----
+// ParserError: (49-49): Expected token LParen got 'Semicolon'
diff --git a/test/libsolidity/syntaxTests/parsing/empty_enum.sol b/test/libsolidity/syntaxTests/parsing/empty_enum.sol
new file mode 100644
index 00000000..dd786cdc
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/empty_enum.sol
@@ -0,0 +1,5 @@
+contract c {
+ enum foo { }
+}
+// ----
+// ParserError: (25-25): enum with no members is not allowed.
diff --git a/test/libsolidity/syntaxTests/parsing/empty_function.sol b/test/libsolidity/syntaxTests/parsing/empty_function.sol
new file mode 100644
index 00000000..4f845189
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/empty_function.sol
@@ -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
diff --git a/test/libsolidity/syntaxTests/parsing/event_with_no_argument_list.sol b/test/libsolidity/syntaxTests/parsing/event_with_no_argument_list.sol
new file mode 100644
index 00000000..ae2591db
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/event_with_no_argument_list.sol
@@ -0,0 +1,5 @@
+contract c {
+ event e;
+}
+// ----
+// ParserError: (21-21): Expected token LParen got 'Semicolon'
diff --git a/test/libsolidity/syntaxTests/parsing/external_variable.sol b/test/libsolidity/syntaxTests/parsing/external_variable.sol
new file mode 100644
index 00000000..5188875f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/external_variable.sol
@@ -0,0 +1,5 @@
+contract c {
+ uint external x;
+}
+// ----
+// ParserError: (19-19): Expected identifier, got 'External'
diff --git a/test/libsolidity/syntaxTests/parsing/fixed_literal_with_double_radix.sol b/test/libsolidity/syntaxTests/parsing/fixed_literal_with_double_radix.sol
new file mode 100644
index 00000000..43bb61fa
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/fixed_literal_with_double_radix.sol
@@ -0,0 +1,5 @@
+contract A {
+ fixed40x40 pi = 3.14.15;
+}
+// ----
+// ParserError: (34-34): Expected token Semicolon got 'Number'
diff --git a/test/libsolidity/syntaxTests/parsing/function_type_as_storage_variable_with_modifiers.sol b/test/libsolidity/syntaxTests/parsing/function_type_as_storage_variable_with_modifiers.sol
new file mode 100644
index 00000000..12480459
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/function_type_as_storage_variable_with_modifiers.sol
@@ -0,0 +1,5 @@
+contract test {
+ function (uint, uint) modifier1() returns (uint) f1;
+}
+// ----
+// ParserError: (66-66): Expected token LBrace got 'Identifier'
diff --git a/test/libsolidity/syntaxTests/parsing/inline_array_empty_cells_check_lvalue.sol b/test/libsolidity/syntaxTests/parsing/inline_array_empty_cells_check_lvalue.sol
new file mode 100644
index 00000000..23052980
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/inline_array_empty_cells_check_lvalue.sol
@@ -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).
diff --git a/test/libsolidity/syntaxTests/parsing/inline_array_empty_cells_check_without_lvalue.sol b/test/libsolidity/syntaxTests/parsing/inline_array_empty_cells_check_without_lvalue.sol
new file mode 100644
index 00000000..88c67619
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/inline_array_empty_cells_check_without_lvalue.sol
@@ -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).
diff --git a/test/libsolidity/syntaxTests/parsing/invalid_fixed_conversion_leading_zeroes_check.sol b/test/libsolidity/syntaxTests/parsing/invalid_fixed_conversion_leading_zeroes_check.sol
new file mode 100644
index 00000000..e0c8fa9a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/invalid_fixed_conversion_leading_zeroes_check.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() {
+ fixed a = 1.0x2;
+ }
+}
+// ----
+// ParserError: (44-44): Expected primary expression.
diff --git a/test/libsolidity/syntaxTests/parsing/local_const_variable.sol b/test/libsolidity/syntaxTests/parsing/local_const_variable.sol
new file mode 100644
index 00000000..55673160
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/local_const_variable.sol
@@ -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'
diff --git a/test/libsolidity/syntaxTests/parsing/location_specifiers_for_state_variables.sol b/test/libsolidity/syntaxTests/parsing/location_specifiers_for_state_variables.sol
new file mode 100644
index 00000000..1b525506
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/location_specifiers_for_state_variables.sol
@@ -0,0 +1,5 @@
+contract Foo {
+ uint[] memory x;
+}
+// ----
+// ParserError: (23-23): Expected identifier, got 'Memory'
diff --git a/test/libsolidity/syntaxTests/parsing/location_specifiers_with_var.sol b/test/libsolidity/syntaxTests/parsing/location_specifiers_with_var.sol
new file mode 100644
index 00000000..47fe37d5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/location_specifiers_with_var.sol
@@ -0,0 +1,5 @@
+contract Foo {
+ function f() { var memory x; }
+}
+// ----
+// ParserError: (35-35): Location specifier needs explicit type name.
diff --git a/test/libsolidity/syntaxTests/parsing/malformed_enum_declaration.sol b/test/libsolidity/syntaxTests/parsing/malformed_enum_declaration.sol
new file mode 100644
index 00000000..5a6eb270
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/malformed_enum_declaration.sol
@@ -0,0 +1,5 @@
+contract c {
+ enum foo { WARNING,}
+}
+// ----
+// ParserError: (33-33): Expected Identifier after ','
diff --git a/test/libsolidity/syntaxTests/parsing/missing_argument_in_named_args.sol b/test/libsolidity/syntaxTests/parsing/missing_argument_in_named_args.sol
new file mode 100644
index 00000000..8e0acfaa
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/missing_argument_in_named_args.sol
@@ -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.
diff --git a/test/libsolidity/syntaxTests/parsing/missing_parameter_name_in_named_args.sol b/test/libsolidity/syntaxTests/parsing/missing_parameter_name_in_named_args.sol
new file mode 100644
index 00000000..0606e2c7
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/missing_parameter_name_in_named_args.sol
@@ -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'
diff --git a/test/libsolidity/syntaxTests/parsing/modifier_without_semicolon.sol b/test/libsolidity/syntaxTests/parsing/modifier_without_semicolon.sol
new file mode 100644
index 00000000..0d719db4
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/modifier_without_semicolon.sol
@@ -0,0 +1,5 @@
+contract c {
+ modifier mod { if (msg.sender == 0) _ }
+}
+// ----
+// ParserError: (52-52): Expected token Semicolon got 'RBrace'
diff --git a/test/libsolidity/syntaxTests/parsing/new_invalid_type_name.sol b/test/libsolidity/syntaxTests/parsing/new_invalid_type_name.sol
new file mode 100644
index 00000000..31cd1f09
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/new_invalid_type_name.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() {
+ new var;
+ }
+}
+// ----
+// ParserError: (35-35): Expected explicit type name.
diff --git a/test/libsolidity/syntaxTests/parsing/no_function_params.sol b/test/libsolidity/syntaxTests/parsing/no_function_params.sol
new file mode 100644
index 00000000..020f1233
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/no_function_params.sol
@@ -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
diff --git a/test/libsolidity/syntaxTests/parsing/payable_accessor.sol b/test/libsolidity/syntaxTests/parsing/payable_accessor.sol
new file mode 100644
index 00000000..a73108ad
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/payable_accessor.sol
@@ -0,0 +1,5 @@
+contract test {
+ uint payable x;
+}
+// ----
+// ParserError: (22-22): Expected identifier, got 'Payable'
diff --git a/test/libsolidity/syntaxTests/parsing/scientific_notation.sol b/test/libsolidity/syntaxTests/parsing/scientific_notation.sol
new file mode 100644
index 00000000..5d656508
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/scientific_notation.sol
@@ -0,0 +1,7 @@
+contract test {
+ uint256 a = 2e10;
+ uint256 b = 2E10;
+ uint256 c = 200e-2;
+ uint256 d = 2E10 wei;
+ uint256 e = 2.5e10;
+}
diff --git a/test/libsolidity/syntaxTests/parsing/single_function_param.sol b/test/libsolidity/syntaxTests/parsing/single_function_param.sol
new file mode 100644
index 00000000..08e531f1
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/single_function_param.sol
@@ -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
diff --git a/test/libsolidity/syntaxTests/parsing/single_function_param_trailing_comma.sol b/test/libsolidity/syntaxTests/parsing/single_function_param_trailing_comma.sol
new file mode 100644
index 00000000..1febdab9
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/single_function_param_trailing_comma.sol
@@ -0,0 +1,5 @@
+contract test {
+ function(uint a,) {}
+}
+// ----
+// ParserError: (32-32): Unexpected trailing comma in parameter list.
diff --git a/test/libsolidity/syntaxTests/parsing/single_return_param_trailing_comma.sol b/test/libsolidity/syntaxTests/parsing/single_return_param_trailing_comma.sol
new file mode 100644
index 00000000..d2e3bbb3
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/single_return_param_trailing_comma.sol
@@ -0,0 +1,5 @@
+contract test {
+ function() returns (uint a,) {}
+}
+// ----
+// ParserError: (43-43): Unexpected trailing comma in parameter list.
diff --git a/test/libsolidity/syntaxTests/parsing/trailing_comma_in_named_args.sol b/test/libsolidity/syntaxTests/parsing/trailing_comma_in_named_args.sol
new file mode 100644
index 00000000..22efc58a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/trailing_comma_in_named_args.sol
@@ -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.
diff --git a/test/libsolidity/syntaxTests/parsing/tuples_without_commas.sol b/test/libsolidity/syntaxTests/parsing/tuples_without_commas.sol
new file mode 100644
index 00000000..d0e376b0
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/tuples_without_commas.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() {
+ var a = (2 2);
+ }
+}
+// ----
+// ParserError: (42-42): Expected token Comma got 'Number'
diff --git a/test/libsolidity/syntaxTests/parsing/var_array.sol b/test/libsolidity/syntaxTests/parsing/var_array.sol
new file mode 100644
index 00000000..60f6dc28
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/var_array.sol
@@ -0,0 +1,5 @@
+contract Foo {
+ function f() { var[] a; }
+}
+// ----
+// ParserError: (34-34): Expected identifier, got 'LBrack'
diff --git a/test/libsolidity/syntaxTests/parsing/variable_definition_in_mapping.sol b/test/libsolidity/syntaxTests/parsing/variable_definition_in_mapping.sol
new file mode 100644
index 00000000..ec55a4db
--- /dev/null
+++ b/test/libsolidity/syntaxTests/parsing/variable_definition_in_mapping.sol
@@ -0,0 +1,7 @@
+contract test {
+ function fun() {
+ mapping(var=>bytes32) d;
+ }
+}
+// ----
+// ParserError: (44-44): Expected elementary type name for mapping key type