From d956d29cec1cb508a09a9e260b62725537e68ba6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Fri, 26 Nov 2010 13:28:49 +0100 Subject: [PATCH] fixed for statement. --- .../CSharp/Parser/CSharpParser.cs | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs b/ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs index 1f093a3f50..f7760011b7 100644 --- a/ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs +++ b/ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs @@ -922,6 +922,19 @@ namespace ICSharpCode.NRefactory.CSharp return result; } + void AddStatementOrList (ForStatement forStatement, Statement init, int role) + { + if (init == null) + return; + if (init is StatementList) { + foreach (var stmt in ((StatementList)init).Statements) { + forStatement.AddChild ((DomNode)stmt.Accept (this), role); + } + } else { + forStatement.AddChild ((DomNode)init.Accept (this), role); + } + } + public override object Visit (For forStatement) { var result = new ForStatement (); @@ -931,16 +944,18 @@ namespace ICSharpCode.NRefactory.CSharp result.AddChild (new CSharpTokenNode (Convert (forStatement.loc), "for".Length), ForStatement.Roles.Keyword); if (location != null) result.AddChild (new CSharpTokenNode (Convert (location[0]), 1), ForStatement.Roles.LPar); - if (forStatement.InitStatement != null) - result.AddChild ((DomNode)forStatement.InitStatement.Accept (this), ForStatement.Roles.Initializer); + + AddStatementOrList (result, forStatement.InitStatement, ForStatement.Roles.Initializer); + if (location != null) result.AddChild (new CSharpTokenNode (Convert (location[1]), 1), ForStatement.Roles.Semicolon); if (forStatement.Test != null) result.AddChild ((DomNode)forStatement.Test.Accept (this), ForStatement.Roles.Condition); if (location != null) result.AddChild (new CSharpTokenNode (Convert (location[2]), 1), ForStatement.Roles.Semicolon); - if (forStatement.Increment != null) - result.AddChild ((DomNode)forStatement.Increment.Accept (this), ForStatement.Roles.Iterator); + + AddStatementOrList (result, forStatement.Increment, ForStatement.Roles.Iterator); + if (location != null) result.AddChild (new CSharpTokenNode (Convert (location[3]), 1), ForStatement.Roles.RPar);