Пример #1
0
        public override int VisitLogical_or(BRAQParser.Logical_orContext context)
        {
            if (context.left != null)
            {
                context.left.Accept(this);

                //если левый истинный, тогда прыгаем, иначе правый

                Label truthey_or = il.DefineLabel();   //stack: left
                il.Emit(OpCodes.Brtrue_S, truthey_or); //stack:
                Label falsey_or = il.DefineLabel();

                context.right.Accept(this);       //stack: right
                il.Emit(OpCodes.Br_S, falsey_or); //stack: right

                il.MarkLabel(truthey_or);         //from brtrue, stack:
                il.Emit(OpCodes.Ldc_I4_1);        // stack : 1

                il.MarkLabel(falsey_or);          //from br_s, stack: right
            }
            else
            {
                context.right.Accept(this);
            }

            return(0);
        }
Пример #2
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="BRAQParser.logical_or"/>.
 /// <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 VisitLogical_or([NotNull] BRAQParser.Logical_orContext context)
 {
     return(VisitChildren(context));
 }
Пример #3
0
 /// <summary>
 /// Exit a parse tree produced by <see cref="BRAQParser.logical_or"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitLogical_or([NotNull] BRAQParser.Logical_orContext context)
 {
 }
Пример #4
0
 public override Type VisitLogical_or(BRAQParser.Logical_orContext context)
 {
     return(binary_optional_left_expr(context, context.left, context.op, context.right));
 }