From 63af9c8471ed2b68d843d54aa5d6edbe882aea4c Mon Sep 17 00:00:00 2001 From: Marek Safar Date: Mon, 13 Sep 2010 09:46:59 +0100 Subject: [PATCH] Better error reporting for missing identifiers. --- mcs/errors/{gcs1525-3.cs => cs1001-3.cs} | 2 +- mcs/errors/cs1001-4.cs | 9 +++++ mcs/errors/{cs1041-2.cs => cs1001.cs} | 2 +- mcs/errors/{cs1525-18.cs => cs1041.cs} | 2 +- mcs/errors/gcs1041.cs | 9 ----- mcs/mcs/cs-parser.jay | 43 ++++++++++++++---------- 6 files changed, 37 insertions(+), 30 deletions(-) rename mcs/errors/{gcs1525-3.cs => cs1001-3.cs} (60%) create mode 100644 mcs/errors/cs1001-4.cs rename mcs/errors/{cs1041-2.cs => cs1001.cs} (65%) rename mcs/errors/{cs1525-18.cs => cs1041.cs} (70%) delete mode 100644 mcs/errors/gcs1041.cs diff --git a/mcs/errors/gcs1525-3.cs b/mcs/errors/cs1001-3.cs similarity index 60% rename from mcs/errors/gcs1525-3.cs rename to mcs/errors/cs1001-3.cs index d183dbab112..b09054c272e 100755 --- a/mcs/errors/gcs1525-3.cs +++ b/mcs/errors/cs1001-3.cs @@ -1,4 +1,4 @@ -// CS1525: Unexpected symbol `)', expecting `identifier' +// CS1001: Unexpected symbol `)', expecting identifier // Line: 8 class C diff --git a/mcs/errors/cs1001-4.cs b/mcs/errors/cs1001-4.cs new file mode 100644 index 00000000000..451eb4b827a --- /dev/null +++ b/mcs/errors/cs1001-4.cs @@ -0,0 +1,9 @@ +// CS1001: Unexpected symbol `)', expecting identifier +// Line: 6 + +class B +{ + T Foo (T) + { + } +} diff --git a/mcs/errors/cs1041-2.cs b/mcs/errors/cs1001.cs similarity index 65% rename from mcs/errors/cs1041-2.cs rename to mcs/errors/cs1001.cs index b108fb6fb4d..a1651fe17f4 100644 --- a/mcs/errors/cs1041-2.cs +++ b/mcs/errors/cs1001.cs @@ -1,4 +1,4 @@ -// cs1001: Identifier expected +// CS1001: Unexpected symbol `)', expecting identifier // Line: 6 class T { diff --git a/mcs/errors/cs1525-18.cs b/mcs/errors/cs1041.cs similarity index 70% rename from mcs/errors/cs1525-18.cs rename to mcs/errors/cs1041.cs index c6ad28b6c7f..a770876f70f 100644 --- a/mcs/errors/cs1525-18.cs +++ b/mcs/errors/cs1041.cs @@ -1,4 +1,4 @@ -// CS1525: Unexpected symbol `foreach', expecting `identifier' +// CS1041: Identifier expected, `foreach' is a keyword // Line: 11 public partial class Log diff --git a/mcs/errors/gcs1041.cs b/mcs/errors/gcs1041.cs deleted file mode 100644 index 61f9833340e..00000000000 --- a/mcs/errors/gcs1041.cs +++ /dev/null @@ -1,9 +0,0 @@ -// CS1001: Identifier expected -// Line: 6 - -class B -{ - T Foo (T) - { - } -} \ No newline at end of file diff --git a/mcs/mcs/cs-parser.jay b/mcs/mcs/cs-parser.jay index 00a087318f2..1f9ea888dd7 100644 --- a/mcs/mcs/cs-parser.jay +++ b/mcs/mcs/cs-parser.jay @@ -443,8 +443,9 @@ using_alias_directive var lt = (Tokenizer.LocatedToken) $2; current_namespace.AddUsingAlias (lt.Value, (MemberName) $4, GetLocation ($1)); } - | USING error { - CheckIdentifierToken (yyToken, GetLocation ($2)); + | USING error + { + Error_SyntaxError (yyToken); $$ = null; } ; @@ -951,8 +952,9 @@ struct_declaration lbag.AppendToMember (current_class, GetLocation ($13)); $$ = pop_current_class (); } - | opt_attributes opt_modifiers opt_partial STRUCT error { - CheckIdentifierToken (yyToken, GetLocation ($5)); + | opt_attributes opt_modifiers opt_partial STRUCT error + { + Error_SyntaxError (yyToken); } ; @@ -1517,8 +1519,8 @@ fixed_parameter parameter_type error { + Error_SyntaxError (yyToken); Location l = GetLocation ($4); - CheckIdentifierToken (yyToken, l); $$ = new Parameter ((FullNamedExpression) $3, "NeedSomeGeneratorHere", (Parameter.Modifier) $2, (Attributes) $1, l); } | opt_attributes @@ -1643,7 +1645,7 @@ parameter_array } | opt_attributes params_modifier type error { - CheckIdentifierToken (yyToken, GetLocation ($4)); + Error_SyntaxError (yyToken); $$ = null; } ; @@ -1921,8 +1923,9 @@ interface_declaration lbag.AppendToMember (current_class, GetLocation ($11), GetLocation ($13)); $$ = pop_current_class (); } - | opt_attributes opt_modifiers opt_partial INTERFACE error { - CheckIdentifierToken (yyToken, GetLocation ($5)); + | opt_attributes opt_modifiers opt_partial INTERFACE error + { + Error_SyntaxError (yyToken); } ; @@ -6202,11 +6205,6 @@ void CheckToken (int error, int yyToken, string msg, Location loc) Report.Error (error, loc, msg); } -void CheckIdentifierToken (int yyToken, Location loc) -{ - CheckToken (1041, yyToken, "Identifier expected", loc); -} - string ConsumeStoredComment () { string s = tmpComment; @@ -6310,7 +6308,6 @@ public NamespaceEntry CurrentNamespace { } } - void Error_SyntaxError (int token) { Error_SyntaxError (0, token, "Unexpected symbol"); @@ -6320,18 +6317,28 @@ void Error_SyntaxError (int error_code, int token, string msg) { string symbol = GetSymbolName (token); string expecting = GetExpecting (); + var loc = lexer.Location - symbol.Length; if (error_code == 0) { - if (expecting == "`)'") + if (expecting == "`identifier'") { + if (token > Token.FIRST_KEYWORD && token < Token.LAST_KEYWORD) { + Report.Error (1041, loc, "Identifier expected, `{0}' is a keyword", symbol); + return; + } + + error_code = 1001; + expecting = "identifier"; + } else if (expecting == "`)'") { error_code = 1026; - else + } else { error_code = 1525; + } } if (string.IsNullOrEmpty (expecting)) - Report.Error (error_code, lexer.Location, "{1} `{0}'", symbol, msg); + Report.Error (error_code, loc, "{1} `{0}'", symbol, msg); else - Report.Error (error_code, lexer.Location, "{2} `{0}', expecting {1}", symbol, expecting, msg); + Report.Error (error_code, loc, "{2} `{0}', expecting {1}", symbol, expecting, msg); } string GetExpecting () -- GitLab