Example #1
0
 public void Render(ElseSyntax @else)
 {
     Render(@else.ElseKeywordToken);
     Render(@else.LineDelimiterNode, true);
     Render(@else.StatementListNode);
     Outdent();
 }
Example #2
0
 public override SyntaxNode Visit(ElseSyntax pNode)
 {
     using (new MetadataCache.LocalScope())
     {
         return(base.Visit(pNode));
     }
 }
Example #3
0
        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()));
        }
Example #4
0
 public static bool LastStatementIsReturn(ElseSyntax pElse)
 {
     if (pElse.Body == null)
     {
         return(false);
     }
     return(LastStatementIsReturn(pElse.Body));
 }
Example #5
0
 protected virtual void VisitElseSyntax(ElseSyntax pNode)
 {
     Visit(pNode.If);
     Visit(pNode.Body);
 }
Example #6
0
 public virtual void Visit(ElseSyntax elseSyntax)
 {
     Visit(elseSyntax.Statements);
 }
Example #7
0
 protected virtual SyntaxNode VisitElseSyntax(ElseSyntax pNode)
 {
     return(SyntaxFactory.Else((IfSyntax)Visit(pNode.If), (BlockSyntax)Visit(pNode.Body)));
 }
Example #8
0
        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);
        }
Example #9
0
        private BoundElse BindElse(ElseSyntax syntax)
        {
            var boundStatement = BindStatement(syntax.Statements);

            return new BoundElse(boundStatement, syntax);
        }
Example #10
0
 public BoundElse(BoundStatement boundStatement, ElseSyntax @else)
     : base(@else)
 {
     BoundStatement = boundStatement;
 }