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); }
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); }
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); }
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); }
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); }
/// <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); }
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); }
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); }
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); }
public virtual T Visit(MultichildExpression multichildExpression) { return(VisitChildren(multichildExpression)); }
public virtual void Enter(MultichildExpression multichildExpression) { }