Exemple #1
0
 public void Emit_Or_Shortcut(parse_tree.boolean2 left, parse_tree.boolean_expression right)
 {
     System.Reflection.Emit.Label l2 = gen.DefineLabel();
     left.emit_code(this, 0);
     gen.Emit(OpCodes.Dup);
     gen.Emit(System.Reflection.Emit.OpCodes.Brtrue, l2);
     right.emit_code(this, 0);
     Emit_Or();
     gen.MarkLabel(l2);
 }
Exemple #2
0
        public override void Emit_Code(generate_interface.typ gen)
        {
            object o;

            parse_tree.boolean_expression be = this.parse_tree as parse_tree.boolean_expression;
            if (Component.reverse_loop_logic)
            {
                o = gen.Loop_Start(this.before_Child == null, true);
            }
            else
            {
                bool negated = be.top_level_negated();
                o = gen.Loop_Start(this.before_Child == null,
                                   negated);
                if (negated)
                {
                    be = be.remove_negation();
                }
            }
            if (this.before_Child != null)
            {
                this.before_Child.Emit_Code(gen);
            }
            gen.Loop_Start_Condition(o);

            if (this.parse_tree != null)
            {
                interpreter_pkg.emit_code(be, this.Text, gen);
            }
            gen.Loop_End_Condition(o);
            if (this.after_Child != null)
            {
                this.after_Child.Emit_Code(gen);
            }
            gen.Loop_End(o);

            if (this.Successor != null)
            {
                this.Successor.Emit_Code(gen);
            }
        }
Exemple #3
0
 public void Emit_Or_Shortcut(parse_tree.boolean2 left, parse_tree.boolean_expression right)
 {
     left.emit_code(this, 0);
     stream.Write(" || ");
     right.emit_code(this, 0);
 }
Exemple #4
0
 public void Emit_Or_Shortcut(parse_tree.boolean2 left, parse_tree.boolean_expression right)
 {
     strings.Append("||");
 }