Exemple #1
0
 public virtual void Visit(JsConditionalExpression node)
 {
     DefaultVisit(node);
     node.Condition.Accept(this);
     node.IfTrue.Accept(this);
     node.IfFalse.Accept(this);
 }
        public virtual JsExpression VisitConditionalExpression(JsConditionalExpression expression, TData data)
        {
            var test      = VisitExpression(expression.Test, data);
            var truePart  = VisitExpression(expression.TruePart, data);
            var falsePart = VisitExpression(expression.FalsePart, data);

            return(ReferenceEquals(test, expression.Test) && ReferenceEquals(truePart, expression.TruePart) && ReferenceEquals(falsePart, expression.FalsePart) ? expression : JsExpression.Conditional(test, truePart, falsePart));
        }
Exemple #3
0
 public override void VisitConditionalExpression(JsConditionalExpression node)
 {
     node.Condition.Accept(this);
     output.Append(" ? ");
     node.IfTrue.Accept(this);
     output.Append(" : ");
     node.IfFalse.Accept(this);
 }
Exemple #4
0
 public override void VisitConditionalExpression(JsConditionalExpression conditionalExpression)
 {
     if (conditionalExpression.TrueExpression.HasAnnotation <MayBeNullAnnotation>() || conditionalExpression.FalseExpression.HasAnnotation <MayBeNullAnnotation>())
     {
         conditionalExpression.AddAnnotation(MayBeNullAnnotation.Instance);
     }
     base.VisitConditionalExpression(conditionalExpression);
 }
Exemple #5
0
 public virtual JsNode Visit(JsConditionalExpression node)
 {
     return(DefaultVisit(node, x =>
     {
         x.Condition = (JsExpression)x.Condition.Accept(this);
         x.IfTrue = (JsExpression)x.IfTrue.Accept(this);
         x.IfFalse = (JsExpression)x.IfFalse.Accept(this);
         return x;
     }));
 }
 private JsNode Trinary(OperatorResolveResult res)
 {
     if (res.OperatorType == ExpressionType.Conditional)
     {
         var node5 = new JsConditionalExpression {
             Condition = VisitExpression(res.Operands[0]), TrueExpression = VisitExpression(res.Operands[1]), FalseExpression = VisitExpression(res.Operands[2])
         };
         return(node5);
     }
     else
     {
         throw new NotImplementedException();
     }
 }
Exemple #7
0
    /// <summary>
    /// Parses the js conditional expression.
    /// </summary>
    /// <param name="literal">The literal.</param>
    /// <param name="test">The test.</param>
    /// <param name="expression">The expression.</param>
    /// <returns>ReadOnlySpan&lt;System.Char&gt;.</returns>
    /// <exception cref="ServiceStack.Script.SyntaxErrorException">Expected Conditional ':' but was {literal.DebugFirstChar()}</exception>
    private static ReadOnlySpan <char> ParseJsConditionalExpression(this ReadOnlySpan <char> literal, JsToken test, out JsConditionalExpression expression)
    {
        literal = literal.Advance(1);

        literal = literal.ParseJsExpression(out var consequent);
        literal = literal.AdvancePastWhitespace();

        if (!literal.FirstCharEquals(':'))
        {
            throw new SyntaxErrorException($"Expected Conditional ':' but was {literal.DebugFirstChar()}");
        }

        literal = literal.Advance(1);

        literal = literal.ParseJsExpression(out var alternate);

        expression = new JsConditionalExpression(test, consequent, alternate);
        return(literal);
    }
Exemple #8
0
        public object VisitConditionalExpression(JsConditionalExpression expression, bool parenthesized)
        {
            // Always parenthesize conditionals (but beware of double parentheses). Better this than accidentally getting the tricky precedence wrong sometimes.
            if (!parenthesized)
            {
                _cb.Append("(");
            }

            // Also, be rather liberal when parenthesizing the operands, partly to avoid bugs, partly for readability.
            VisitExpression(expression.Test, GetPrecedence(expression.Test.NodeType) >= PrecedenceMultiply);
            _cb.Append(_space + "?" + _space);
            VisitExpression(expression.TruePart, GetPrecedence(expression.TruePart.NodeType) >= PrecedenceMultiply);
            _cb.Append(_space + ":" + _space);
            VisitExpression(expression.FalsePart, GetPrecedence(expression.FalsePart.NodeType) >= PrecedenceMultiply);

            if (!parenthesized)
            {
                _cb.Append(")");
            }

            return(null);
        }
Exemple #9
0
 public void VisitConditionalExpression(JsConditionalExpression conditionalExpression)
 {
     VisitChildren(conditionalExpression);
 }
Exemple #10
0
 public void Visit(JsConditionalExpression node)
 {
     BeforeVisit(node);
     DefaultVisit(node, VisitConditionalExpression);
     AfterVisit(node);
 }
Exemple #11
0
 public virtual void VisitConditionalExpression(JsConditionalExpression node)
 {
 }
 /// <summary>
 /// Equalses the specified other.
 /// </summary>
 /// <param name="other">The other.</param>
 /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
 protected bool Equals(JsConditionalExpression other)
 {
     return(Equals(Test, other.Test) &&
            Equals(Consequent, other.Consequent) &&
            Equals(Alternate, other.Alternate));
 }