From 9e7362c0add051bf1b33011ca7e40c5e3bf6c669 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 27 Aug 2015 01:11:58 -0700 Subject: [PATCH] Preserve error message. Fixup tests (which now show better error recovery). --- src/Compilers/CSharp/Portable/Parser/LanguageParser.cs | 7 +++++++ .../CSharp/Test/Syntax/Parsing/ParserErrorMessageTests.cs | 8 ++------ .../Test/Syntax/Parsing/ParsingErrorRecoveryTests.cs | 7 +++---- .../Runtime.FX46/TestRuntime.FX46.csproj.nuget.targets | 2 +- .../Utilities/Runtime.FX46/TestRuntime.FX46.nuget.targets | 2 +- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs b/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs index 967b4b718e7..dd0720de6cb 100644 --- a/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs +++ b/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs @@ -3446,6 +3446,13 @@ private bool IsPossibleAccessorModifier() } var token = this.PeekToken(peekIndex); + if (token.Kind == SyntaxKind.CloseBraceToken) + { + // If we see "{ get { } public } + // then we will think that "public" likely starts an accessor. + return true; + } + switch (token.ContextualKind) { case SyntaxKind.GetKeyword: diff --git a/src/Compilers/CSharp/Test/Syntax/Parsing/ParserErrorMessageTests.cs b/src/Compilers/CSharp/Test/Syntax/Parsing/ParserErrorMessageTests.cs index 265cca2849b..992a94c5ca3 100644 --- a/src/Compilers/CSharp/Test/Syntax/Parsing/ParserErrorMessageTests.cs +++ b/src/Compilers/CSharp/Test/Syntax/Parsing/ParserErrorMessageTests.cs @@ -2305,12 +2305,8 @@ public static int Main() // (7,13): error CS1043: { or ; expected // get return 1; Diagnostic(ErrorCode.ERR_SemiOrLBraceExpected, "return"), - // (9,15): error CS1014: A get or set accessor expected - // public static int Main() - Diagnostic(ErrorCode.ERR_GetOrSetExpected, "int"), - // (9,15): error CS1513: } expected - // public static int Main() - Diagnostic(ErrorCode.ERR_RbraceExpected, "int")); + // (8,2): error CS1513: } expected + Diagnostic(ErrorCode.ERR_RbraceExpected, "")); } [Fact] diff --git a/src/Compilers/CSharp/Test/Syntax/Parsing/ParsingErrorRecoveryTests.cs b/src/Compilers/CSharp/Test/Syntax/Parsing/ParsingErrorRecoveryTests.cs index 37854f7cf47..dacecfcd7bc 100644 --- a/src/Compilers/CSharp/Test/Syntax/Parsing/ParsingErrorRecoveryTests.cs +++ b/src/Compilers/CSharp/Test/Syntax/Parsing/ParsingErrorRecoveryTests.cs @@ -5494,7 +5494,7 @@ public void TestModifiedMemberAfterPropertyGetBrace() Assert.False(pd.AccessorList.OpenBraceToken.IsMissing); Assert.NotNull(pd.AccessorList.CloseBraceToken); Assert.True(pd.AccessorList.CloseBraceToken.IsMissing); - Assert.Equal(2, pd.AccessorList.Accessors.Count); + Assert.Equal(1, pd.AccessorList.Accessors.Count); var acc = pd.AccessorList.Accessors[0]; Assert.Equal(SyntaxKind.GetAccessorDeclaration, acc.Kind()); Assert.NotNull(acc.Keyword); @@ -5508,10 +5508,9 @@ public void TestModifiedMemberAfterPropertyGetBrace() Assert.True(acc.Body.CloseBraceToken.IsMissing); Assert.Equal(SyntaxKind.None, acc.SemicolonToken.Kind()); - Assert.Equal(3, file.Errors().Length); + Assert.Equal(2, file.Errors().Length); Assert.Equal((int)ErrorCode.ERR_RbraceExpected, file.Errors()[0].Code); - Assert.Equal((int)ErrorCode.ERR_GetOrSetExpected, file.Errors()[1].Code); - Assert.Equal((int)ErrorCode.ERR_RbraceExpected, file.Errors()[2].Code); + Assert.Equal((int)ErrorCode.ERR_RbraceExpected, file.Errors()[1].Code); } [Fact] diff --git a/src/Test/Utilities/Runtime.FX46/TestRuntime.FX46.csproj.nuget.targets b/src/Test/Utilities/Runtime.FX46/TestRuntime.FX46.csproj.nuget.targets index faedd111031..3f4e381f4a7 100644 --- a/src/Test/Utilities/Runtime.FX46/TestRuntime.FX46.csproj.nuget.targets +++ b/src/Test/Utilities/Runtime.FX46/TestRuntime.FX46.csproj.nuget.targets @@ -1,7 +1,7 @@  - C:\Users\tomat\.nuget\packages\ + C:\Users\cyrusn\.nuget\packages\ diff --git a/src/Test/Utilities/Runtime.FX46/TestRuntime.FX46.nuget.targets b/src/Test/Utilities/Runtime.FX46/TestRuntime.FX46.nuget.targets index faedd111031..3f4e381f4a7 100644 --- a/src/Test/Utilities/Runtime.FX46/TestRuntime.FX46.nuget.targets +++ b/src/Test/Utilities/Runtime.FX46/TestRuntime.FX46.nuget.targets @@ -1,7 +1,7 @@  - C:\Users\tomat\.nuget\packages\ + C:\Users\cyrusn\.nuget\packages\ -- GitLab