public void Render(ElseSyntax @else) { Render(@else.ElseKeywordToken); Render(@else.LineDelimiterNode, true); Render(@else.StatementListNode); Outdent(); }
public override SyntaxNode Visit(ElseSyntax pNode) { using (new MetadataCache.LocalScope()) { return(base.Visit(pNode)); } }
private IfSyntax ParseIf() { StartSpan(); Expect(TokenType.If); Expect(TokenType.LeftParen); var condition = GetExpression(); Expect(TokenType.RightParen); Ignore(TokenType.Newline); BlockSyntax body = null; if (Peek(TokenType.LeftScope)) { body = ParseBlock(); } else { body = SyntaxFactory.Block(new List <SyntaxNode> { ParseStatement() }); } Ignore(TokenType.Newline); ElseSyntax e = ParseElse(); return(SyntaxFactory.If(condition, body, e).SetSpan <IfSyntax>(EndSpan())); }
public static bool LastStatementIsReturn(ElseSyntax pElse) { if (pElse.Body == null) { return(false); } return(LastStatementIsReturn(pElse.Body)); }
protected virtual void VisitElseSyntax(ElseSyntax pNode) { Visit(pNode.If); Visit(pNode.Body); }
public virtual void Visit(ElseSyntax elseSyntax) { Visit(elseSyntax.Statements); }
protected virtual SyntaxNode VisitElseSyntax(ElseSyntax pNode) { return(SyntaxFactory.Else((IfSyntax)Visit(pNode.If), (BlockSyntax)Visit(pNode.Body))); }
protected override SyntaxNode VisitSelectSyntax(SelectSyntax pNode) { var rw = _rewrite; _rewrite = false; //Save itVar in case we hit a nested for or select statement var it = _itVar; _itVar = pNode.Condition; SyntaxNode retval = base.VisitSelectSyntax(pNode); if (_rewrite) { if (pNode.Annotation.Value == KeyAnnotations.Complete) { CompilerErrors.IgnoredComplete(pNode.Span); } //Only rewrite if we have "it" for (int i = pNode.Cases.Count - 1; i >= 0; i--) { var currentCase = pNode.Cases[i]; //Default cause needs to be the last one. Make a else statement if (currentCase.IsDefault) { _currentElse = SyntaxFactory.Else(null, currentCase.Body); } else { //The condition needs to be a comparison binary expression SyntaxNode baseExpression = Visit(currentCase.Conditions[0]); if (!IsComparison(baseExpression)) { //If it isn't make it one baseExpression = SyntaxFactory.BinaryExpression(_itVar, BinaryExpressionOperator.Equals, baseExpression); ((BinaryExpressionSyntax)baseExpression).SetType(SmallTypeCache.Boolean); } for (int j = 0; j < currentCase.Conditions.Count - 1; j++) { var newExpression = currentCase.Conditions[j + 1]; if (!IsComparison(newExpression)) { //If it isn't make it one newExpression = SyntaxFactory.BinaryExpression(_itVar, BinaryExpressionOperator.Equals, newExpression); ((BinaryExpressionSyntax)newExpression).SetType(SmallTypeCache.Boolean); } baseExpression = SyntaxFactory.BinaryExpression(baseExpression, BinaryExpressionOperator.Or, newExpression); ((BinaryExpressionSyntax)baseExpression).SetType(SmallTypeCache.Boolean); } //Visit body so we can rewrite any "it" var b = (BlockSyntax)Visit(currentCase.Body); _currentIf = SyntaxFactory.If(baseExpression, b, _currentElse); if (i > 0) { //As long as this isn't the last statement, make an else if _currentElse = SyntaxFactory.Else(_currentIf, null); } } } retval = _currentIf; } _itVar = it; _rewrite = rw; return(retval); }
private BoundElse BindElse(ElseSyntax syntax) { var boundStatement = BindStatement(syntax.Statements); return new BoundElse(boundStatement, syntax); }
public BoundElse(BoundStatement boundStatement, ElseSyntax @else) : base(@else) { BoundStatement = boundStatement; }