private Statement ParseSwitchStatement(ILabelSet labelSet) { var result = new SwitchStatement(Lookahead.StartPosition.LineNo, labelSet); Match(TokenType.Switch); Match(TokenType.LParenthesis); result.Expression = ParseExpression(); Match(TokenType.RParenthesis); Match(TokenType.LCurlyBrace); result.BeforeDefault = ParseCaseClauseBlockStatement(); if (Lookahead.Type == TokenType.Default) { ReadNextToken(); Match(TokenType.Colon); result.DefaultClause = ParseStatementListStatement(); result.AfterDefault = ParseCaseClauseBlockStatement(); } if (result.BeforeDefault.IsEmpty || (result.AfterDefault != null && result.AfterDefault.IsEmpty)) { Errors.ThrowExpectedCaseClause(Lookahead.StartPosition); } Match(TokenType.RCurlyBrace); return(result); }
private Statement ParseWhileStatement(ILabelSet labelSet) { var result = new WhileStatement(Lookahead.StartPosition.LineNo, labelSet); Match(TokenType.While); Match(TokenType.LParenthesis); result.Condition = ParseExpression(); Match(TokenType.RParenthesis); result.Statement = ParseStatement(true); return(result); }
internal ForStatement( int lineNo, Expression initialization, Expression condition, Expression increment, ILabelSet labelSet) : base(StatementType.For, lineNo, labelSet) { _initialization = initialization; _condition = condition; _increment = increment; }
public WhileStatement(int lineNo, ILabelSet labelSet) : base(StatementType.While, lineNo, labelSet) { }
private Statement ParseForStatement(ILabelSet labelSet) { var startPosition = Lookahead.StartPosition; IterationStatement result = null; Match(TokenType.For); Match(TokenType.LParenthesis); var isVariableDeclaration = false; if (Lookahead.Type == TokenType.Var) { ReadNextToken(); isVariableDeclaration = true; } if (Lookahead.Type == TokenType.Ident) { var variableName = Lookahead.Value; if (PeekNextToken().Type == TokenType.In) { MoveForwardLookahead(); if (isVariableDeclaration) { if (!_currentFunction.DeclaredVariables.Contains(variableName)) { _currentFunction.DeclaredVariables.Add(variableName); } } result = new ForInStatement(startPosition.LineNo, variableName, ParseExpression(), labelSet); } } if (result == null) { Expression initialization = null; if (isVariableDeclaration) { initialization = ParseVariableDeclarationList(); } else { if (Lookahead.Type != TokenType.Semicolon) { initialization = ParseExpression(); } } Match(TokenType.Semicolon); Expression condition = null; if (Lookahead.Type != TokenType.Semicolon) { condition = ParseExpression(); } Match(TokenType.Semicolon); Expression increment = null; if (Lookahead.Type != TokenType.RParenthesis) { increment = ParseExpression(); } result = new ForStatement(startPosition.LineNo, initialization, condition, increment, labelSet); } Match(TokenType.RParenthesis); result.Statement = ParseStatement(true); return(result); }
protected LabellableStatement(StatementType type, int lineNo, ILabelSet labelSet) : base(type, lineNo) { Contract.Requires(labelSet != null); _labelSet = labelSet.UnionWith(string.Empty); }
public ForInStatement(int lineNo, string variableName, Expression enumerable, ILabelSet labelSet) : base(StatementType.ForIn, lineNo, labelSet) { Contract.Requires(!string.IsNullOrEmpty(variableName)); Contract.Requires(enumerable != null); _variableName = variableName; _enumerable = enumerable; }
public SwitchStatement(int lineNo, ILabelSet labelSet) : base(StatementType.Switch, lineNo, labelSet) { }
protected IterationStatement(StatementType type, int lineNo, ILabelSet labelSet) : base(type, lineNo, labelSet) { }