From fa6ea1222f48576a2bd028929f8eeb9f0a3b44a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Tue, 8 Nov 2011 10:46:27 +0100 Subject: [PATCH] Added error expression for the for construct. --- ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs | 2 +- ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay | 2 +- ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs | 10 ++++++++-- ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs | 2 +- ICSharpCode.NRefactory.CSharp/Parser/mcs/visit.cs | 5 +++++ 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs index cffbf80454..4a27cae7f9 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs @@ -7922,7 +7922,7 @@ void case_797() void case_798() #line 5301 "cs-parser.jay" { - For f = new For ((Statement) yyVals[-2+yyTop], null, null, null, GetLocation (yyVals[-5+yyTop])); + For f = new For ((Statement) yyVals[-2+yyTop], ErrorExpression.Create (0, lexer.Location, "Syntax error"), null, null, GetLocation (yyVals[-5+yyTop])); current_block.AddStatement (f); lbag.AddStatement (f, current_block.StartLocation, GetLocation (yyVals[-1+yyTop])); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay index a308299b7a..a8ef7c8c9a 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay @@ -5299,7 +5299,7 @@ for_statement_cont } | opt_for_initializer SEMICOLON error { - For f = new For ((Statement) $1, null, null, null, GetLocation ($-2)); + For f = new For ((Statement) $1, ErrorExpression.Create (0, lexer.Location, "Syntax error"), null, null, GetLocation ($-2)); current_block.AddStatement (f); lbag.AddStatement (f, current_block.StartLocation, GetLocation ($2)); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs index 9249f6cdbc..09f18194e0 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs @@ -9168,10 +9168,11 @@ namespace Mono.CSharp { } - ErrorExpression (int errorCode, Location location, string error) : base (InternalType.ErrorType) + ErrorExpression (int errorCode, Location location, string error) + : base (InternalType.ErrorType) { this.ErrorCode = errorCode; - this.loc = location; + base.loc = location; this.Error = error; } @@ -9201,6 +9202,11 @@ namespace Mono.CSharp public override void Error_OperatorCannotBeApplied (ResolveContext rc, Location loc, string oper, TypeSpec t) { } + + public override object Accept (StructuralVisitor visitor) + { + return visitor.Visit (this); + } } public class UserCast : Expression { diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs index 5b02521f30..2e8460f659 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs @@ -484,7 +484,7 @@ namespace Mono.CSharp { bool infinite, empty; public For (Statement init_statement, - BooleanExpression test, + Expression test, Statement increment, Statement statement, Location l) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/visit.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/visit.cs index c37d302798..92b3876557 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/visit.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/visit.cs @@ -183,6 +183,11 @@ namespace Mono.CSharp { return null; } + + public virtual object Visit (ErrorExpression errorExpression) + { + return null; + } public virtual object Visit (If ifStatement) {