Esempio n. 1
0
        public Ust VisitChildren(IRuleNode node)
        {
            Ust result;

            if (node.ChildCount == 0)
            {
                result = null;
            }
            else if (node.ChildCount == 1)
            {
                result = Visit(node.GetChild(0));
            }
            else
            {
                var exprs = new List <Expression>();
                for (int i = 0; i < node.ChildCount; i++)
                {
                    Ust child = Visit(node.GetChild(i));
                    if (child != null)
                    {
                        // Ignore null.
                        if (child is Expression childExpression)
                        {
                            exprs.Add(childExpression);
                        }
                        else
                        {
                            exprs.Add(new WrapperExpression(child));
                        }
                    }
                }
                result = new MultichildExpression(exprs);
            }
            return(result);
        }
Esempio n. 2
0
        public override Ust VisitConditionalAccessExpression(ConditionalAccessExpressionSyntax node)
        {
            Ust        ustNode    = base.Visit(node.Expression);
            Expression expression = ustNode as Expression;

            if (expression == null)
            {
                expression = new MultichildExpression(((ArgsUst)ustNode).Collection, ustNode.TextSpan);
            }
            Expression whenNotNullExpression;

            if (node.WhenNotNull is ElementBindingExpressionSyntax)
            {
                var args = (ArgsUst)VisitElementBindingExpression((ElementBindingExpressionSyntax)node.WhenNotNull);
                whenNotNullExpression = new IndexerExpression(expression, args, args.TextSpan);
            }
            else
            {
                whenNotNullExpression = (Expression)base.Visit(node.WhenNotNull);
            }
            var nullExpr       = new NullLiteral(default(TextSpan));
            var binayOpLiteral = new BinaryOperatorLiteral(BinaryOperator.Equal, default(TextSpan));
            var condition      = new BinaryOperatorExpression(expression, binayOpLiteral, nullExpr, default(TextSpan));

            var result = new ConditionalExpression(condition, nullExpr, whenNotNullExpression, node.GetTextSpan());

            return(result);
        }
Esempio n. 3
0
        public override Ust VisitInterpolatedStringExpression(InterpolatedStringExpressionSyntax node)
        {
            Expression[] expressions = node.Contents.Select(content => (Expression)VisitAndReturnNullIfError(content)).ToArray();
            var          result      = new MultichildExpression(expressions, node.GetTextSpan());

            return(result);
        }
Esempio n. 4
0
        public override Ust VisitInitializerExpression(InitializerExpressionSyntax node)
        {
            var children = node.Expressions.Select(e => (Expression)VisitAndReturnNullIfError(e))
                           .ToArray();

            var result = new MultichildExpression(children, node.GetTextSpan());

            return(result);
        }
Esempio n. 5
0
        public override UstNode VisitQueryExpression(QueryExpressionSyntax node)
        {
            var expressions = node.DescendantNodes().OfType <ExpressionSyntax>()
                              .Select(exp => (Expression)VisitAndReturnNullIfError(exp)).ToList();

            var result = new MultichildExpression(expressions, node.GetTextSpan(), FileNode);

            return(result);
        }
Esempio n. 6
0
        /// <returns><see cref="MultichildExpression"/></returns>
        public UstNode VisitExpressionSequence([NotNull] ECMAScriptParser.ExpressionSequenceContext context)
        {
            List <Expression> expressions = context.singleExpression()
                                            .Select(expr => Visit(expr).ToExpressionIfRequired())
                                            .Where(expr => expr != null)
                                            .ToList();
            var result = new MultichildExpression(expressions, context.GetTextSpan(), FileNode);

            return(result);
        }
Esempio n. 7
0
        public override Ust VisitQueryExpression(QueryExpressionSyntax node)
        {
            IEnumerable <Expression> expressions = node.DescendantNodes()
                                                   .OfType <ExpressionSyntax>()
                                                   .Select(exp => VisitAndReturnNullIfError(exp) as Expression)
                                                   .Where(expr => expr != null);

            var result = new MultichildExpression(expressions, node.GetTextSpan());

            return(result);
        }
Esempio n. 8
0
        public override Ust VisitInitializerExpression(InitializerExpressionSyntax node)
        {
            Ust result   = null;
            var children = node.Expressions.Select(e => (Expression)VisitAndReturnNullIfError(e))
                           .ToArray();
            var textSpan = node.GetTextSpan();

            if (node.Kind() == SyntaxKind.ArrayInitializerExpression)
            {
                var sizes = new List <Expression> {
                    new IntLiteral(children.Length)
                };
                result = new ArrayCreationExpression(new TypeToken("", textSpan), sizes, children.ToList(), textSpan);
            }
            else
            {
                result = new MultichildExpression(children, textSpan);
            }

            return(result);
        }
Esempio n. 9
0
        public Ust VisitList(IList <IParseTree> nodes)
        {
            var exprs = new List <Expression>();

            for (int i = 0; i < nodes.Count; i++)
            {
                var child = Visit(nodes[i]);
                if (child != null)
                {
                    // Ignore null.
                    if (child is Expression childExpression)
                    {
                        exprs.Add(childExpression);
                    }
                    else
                    {
                        exprs.Add(new WrapperExpression(child));
                    }
                }
            }
            var result = new MultichildExpression(exprs);

            return(result);
        }
Esempio n. 10
0
 public virtual T Visit(MultichildExpression multichildExpression)
 {
     return(VisitChildren(multichildExpression));
 }
Esempio n. 11
0
 public virtual void Enter(MultichildExpression multichildExpression)
 {
 }