public IfElseExpressionFactory Consequence(BlockStatementParseResult consequenceParseResult) { consequence = new BlockStatement { Statements = consequenceParseResult.Statements }; return(this); }
public FunctionExpressionFactory Body(BlockStatementParseResult bodyParseResult) { body = new BlockStatement { Statements = bodyParseResult.Statements }; return(this); }
public IfElseExpressionFactory Alternative(BlockStatementParseResult alternativeParseResult) { if (alternativeParseResult == default(BlockStatementParseResult)) { return(this); } alternative = new BlockStatement { Statements = alternativeParseResult.Statements }; return(this); }
private static ExpressionParseResult ParseIfElseExpression(ExpressionParseResult currentState) { BlockStatementParseResult alternativeParseResult = null; var conditionParseResult = ParseExpression(Factory.ExpressionParseResult() .Assign(currentState) .Position(currentState.Position + Skip.If) .Precedence(Precedence.Lowest) .Create() ); if (conditionParseResult.Errors.Count > 0) { return(conditionParseResult); } var consequenceParseResult = ParseBlockStatement(Factory.ExpressionParseResult() .Assign(conditionParseResult) .Position(conditionParseResult.Position + Skip.Brace) .Create() ); if (consequenceParseResult.Errors.Count > 0) { return(Factory.ExpressionParseResult() .Assign(currentState) .Errors(consequenceParseResult.Errors) .Create()); } var elseToken = currentState.Tokens.Skip(consequenceParseResult.Position).Take(1).FirstOrDefault(); if (elseToken != default(Token) && elseToken.Kind == SyntaxKind.Else) { alternativeParseResult = ParseBlockStatement(Factory.ExpressionParseResult() .Assign(currentState) .Position(consequenceParseResult.Position + Skip.Else + Skip.Brace) .Create() ); if (alternativeParseResult.Errors.Count > 0) { return(Factory.ExpressionParseResult() .Assign(currentState) .Errors(alternativeParseResult.Errors) .Create()); } } var expression = Factory.IfElseExpression() .Condition(conditionParseResult) .Consequence(consequenceParseResult) .Alternative(alternativeParseResult) .Create(); var position = alternativeParseResult != default(BlockStatementParseResult) ? alternativeParseResult.Position : consequenceParseResult.Position; return(Factory.ExpressionParseResult() .Assign(currentState) .Expression(expression) .Position(position) .Precedence(Precedence.Lowest) .Create()); }