public override AstNode VisitAssignment_expression([NotNull] GLSL_ES300Parser.Assignment_expressionContext context)
        {
            var cond = context.conditional_expression();

            if (cond != null)
            {
                return(this.Visit(cond));
            }

            var result = new ExpressionBinary();

            result.Left  = (Expression)this.Visit(context.unary_expression());
            result.Right = (Expression)this.Visit(context.assignment_expression());

            var op = context.assignment_operator();

            if (op.Assign() != null)
            {
                result.Operator = Operator.Assign;
            }

            if (op.MulAssign() != null)
            {
                result.Operator = Operator.MulAssign;
            }

            if (op.DivAssign() != null)
            {
                result.Operator = Operator.DivAssign;
            }

            if (op.ModAssign() != null)
            {
                result.Operator = Operator.ModAssign;
            }

            if (op.AddAssign() != null)
            {
                result.Operator = Operator.AddAssign;
            }

            if (op.SubAssign() != null)
            {
                result.Operator = Operator.SubAssign;
            }

            if (op.LeftAssign() != null)
            {
                result.Operator = Operator.LeftAssign;
            }

            if (op.RightAssign() != null)
            {
                result.Operator = Operator.RightAssign;
            }

            if (op.AndAssign() != null)
            {
                result.Operator = Operator.AndAssign;
            }

            if (op.XorAssign() != null)
            {
                result.Operator = Operator.XorAssign;
            }

            if (op.OrAssign() != null)
            {
                result.Operator = Operator.OrAssign;
            }

            return(result);
        }
Beispiel #2
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="GLSL_ES300Parser.assignment_expression"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitAssignment_expression([NotNull] GLSL_ES300Parser.Assignment_expressionContext context)
 {
     return(VisitChildren(context));
 }