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);