From 30d40c133f0899c8e1266c45ede7416aadfd26cd Mon Sep 17 00:00:00 2001 From: CyrusNajmabadi Date: Tue, 10 Jan 2017 09:04:09 -0800 Subject: [PATCH] Move more errors out of the parser. (#16326) --- .../CSharp/Portable/Parser/LanguageParser.cs | 4 ---- .../Source/SourceUserDefinedConversionSymbol.cs | 4 ++++ .../Syntax/Parsing/ParserErrorMessageTests.cs | 16 ++++++++++++++++ .../Test/Syntax/Parsing/ScriptParsingTests.cs | 3 --- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs b/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs index 881ac7dd238..8d276f72ec7 100644 --- a/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs +++ b/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs @@ -2958,10 +2958,6 @@ private ConversionOperatorDeclarationSyntax ParseConversionOperatorDeclaration(S var type = this.ParseType(); var paramList = this.ParseParenthesizedParameterList(); - if (paramList.Parameters.Count != 1) - { - paramList = this.AddErrorToFirstToken(paramList, ErrorCode.ERR_OvlUnaryOperatorExpected); - } BlockSyntax blockBody; ArrowExpressionClauseSyntax expressionBody; diff --git a/src/Compilers/CSharp/Portable/Symbols/Source/SourceUserDefinedConversionSymbol.cs b/src/Compilers/CSharp/Portable/Symbols/Source/SourceUserDefinedConversionSymbol.cs index 6dc8bd2b07b..d70f9d59cb8 100644 --- a/src/Compilers/CSharp/Portable/Symbols/Source/SourceUserDefinedConversionSymbol.cs +++ b/src/Compilers/CSharp/Portable/Symbols/Source/SourceUserDefinedConversionSymbol.cs @@ -48,6 +48,10 @@ internal sealed class SourceUserDefinedConversionSymbol : SourceUserDefinedOpera diagnostics, isExpressionBodied) { + if (syntax.ParameterList.Parameters.Count != 1) + { + diagnostics.Add(ErrorCode.ERR_OvlUnaryOperatorExpected, syntax.ParameterList.GetLocation()); + } } internal new ConversionOperatorDeclarationSyntax GetSyntax() diff --git a/src/Compilers/CSharp/Test/Syntax/Parsing/ParserErrorMessageTests.cs b/src/Compilers/CSharp/Test/Syntax/Parsing/ParserErrorMessageTests.cs index a4ab6df97a7..a3ab4b679f4 100644 --- a/src/Compilers/CSharp/Test/Syntax/Parsing/ParserErrorMessageTests.cs +++ b/src/Compilers/CSharp/Test/Syntax/Parsing/ParserErrorMessageTests.cs @@ -1827,6 +1827,22 @@ public static void Main() ParseAndValidate(test, Diagnostic(ErrorCode.ERR_OvlUnaryOperatorExpected, "ii")); } + [Fact] + public void CS1019ERR_OvlUnaryOperatorExpected2() + { + var test = @" +class C +{ + public static implicit operator int(C c1, C c2) => 0; +} +"; + + CreateCompilationWithMscorlib(test).VerifyDiagnostics( + // (4,40): error CS1019: Overloadable unary operator expected + // public static implicit operator int(C c1, C c2) => 0; + Diagnostic(ErrorCode.ERR_OvlUnaryOperatorExpected, "(C c1, C c2)").WithLocation(4, 40)); + } + [WorkItem(906502, "DevDiv/Personal")] [Fact] public void CS1020ERR_OvlBinaryOperatorExpected() diff --git a/src/Compilers/CSharp/Test/Syntax/Parsing/ScriptParsingTests.cs b/src/Compilers/CSharp/Test/Syntax/Parsing/ScriptParsingTests.cs index 73177bad3b0..f759971ff1a 100644 --- a/src/Compilers/CSharp/Test/Syntax/Parsing/ScriptParsingTests.cs +++ b/src/Compilers/CSharp/Test/Syntax/Parsing/ScriptParsingTests.cs @@ -8302,7 +8302,6 @@ public void OperatorError() new ErrorDescription { Code = 1003, Line = 1, Column = 9 }, new ErrorDescription { Code = 1031, Line = 1, Column = 9 }, new ErrorDescription { Code = 1003, Line = 1, Column = 1 }, - new ErrorDescription { Code = 1019, Line = 1, Column = 9 }, new ErrorDescription { Code = 1026, Line = 1, Column = 9 }, new ErrorDescription { Code = (int)ErrorCode.ERR_SemicolonExpected, Line = 1, Column = 9 }); } @@ -8315,7 +8314,6 @@ public void OperatorImplicitError() new ErrorDescription { Code = 1003, Line = 1, Column = 9 }, new ErrorDescription { Code = 1031, Line = 1, Column = 9 }, new ErrorDescription { Code = 1003, Line = 1, Column = 9 }, - new ErrorDescription { Code = 1019, Line = 1, Column = 9 }, new ErrorDescription { Code = 1026, Line = 1, Column = 9 }, new ErrorDescription { Code = (int)ErrorCode.ERR_SemicolonExpected, Line = 1, Column = 9 }); } @@ -8328,7 +8326,6 @@ public void OperatorExplicitError() new ErrorDescription { Code = 1003, Line = 1, Column = 9 }, new ErrorDescription { Code = 1031, Line = 1, Column = 9 }, new ErrorDescription { Code = 1003, Line = 1, Column = 9 }, - new ErrorDescription { Code = 1019, Line = 1, Column = 9 }, new ErrorDescription { Code = 1026, Line = 1, Column = 9 }, new ErrorDescription { Code = (int)ErrorCode.ERR_SemicolonExpected, Line = 1, Column = 9 }); } -- GitLab