private Statement ParseIfStatement() { Eat(TokenKind.KeywordIf); var start = GetStart(); List<Tuple<Expression, Statement>> testPairs = new List<Tuple<Expression, Statement>>(); Eat(TokenKind.LeftParenthesis); Expression test = ParseExpression(); Eat(TokenKind.RightParenthesis); Statement ifTrue = ParseBlockOrStatement(); Statement ifFalse = null; testPairs.Add(new Tuple<Expression, Statement>(test, ifTrue)); while (MaybeEat(TokenKind.KeywordElse)) { test = null; if (MaybeEat(TokenKind.KeywordIf)) { Eat(TokenKind.LeftParenthesis); test = ParseExpression(); Eat(TokenKind.RightParenthesis); ifTrue = ParseBlockOrStatement(); testPairs.Add(new Tuple<Expression, Statement>(test, ifTrue)); continue; } ifFalse = ParseBlockOrStatement(); break; } IfElseStatement ret = new IfElseStatement(testPairs.ToArray(), ifFalse); ret.SetLoc(_globalParent, start, GetEnd()); return ret; }
public override bool Walk(IfElseStatement node) { node.Parent = _currentScope; return base.Walk(node); }