internal void Emit(ILGenerator ilg, Label end)
        {
            Cond.Emit(ilg, true);
            var lf = ilg.DefineLabel();

            ilg.Emit(OpCodes.Brfalse, lf);
            Stmt.Emit(ilg);
            ilg.Emit(OpCodes.Br, end);
            ilg.MarkLabel(lf);
        }
 internal override void Emit(ILGenerator ilg, Label end)
 {
     Cond.Emit(ilg, true);
     ilg.Emit(OpCodes.Brfalse, Exit(ilg));
     if (When != null)
     {
         When.Emit(ilg, true);
         ilg.Emit(OpCodes.Brfalse, Exit(ilg));
     }
     base.Emit(ilg, end);
 }
 internal override void EmitStmt(ILGenerator ilg)
 {
     Begin = ilg.DefineLabel();
     End   = ilg.DefineLabel();
     ilg.MarkLabel(Begin);
     Cond.Emit(ilg, true);
     ilg.Emit(OpCodes.Brfalse, End);
     Stmt.Emit(ilg);
     ilg.Emit(OpCodes.Br, Begin);
     ilg.MarkLabel(End);
 }
        internal override void EmitStmt(ILGenerator ilg)
        {
            Cond.Emit(ilg, true);
            var lb = ilg.DefineLabel();
            var le = ilg.DefineLabel();

            ilg.Emit(OpCodes.Brtrue, lb);
            StmtElse?.Emit(ilg);
            ilg.Emit(OpCodes.Br, le);
            ilg.MarkLabel(lb);
            StmtIf?.Emit(ilg);
            ilg.MarkLabel(le);
        }
示例#5
0
        internal override void Emit(ILGenerator ilg, bool preserve)
        {
            Cond.Emit(ilg);
            var lbFalse = ilg.DefineLabel();
            var lbTrue  = ilg.DefineLabel();

            ilg.Emit(OpCodes.Brfalse, lbFalse);
            True.Emit(ilg);
            ilg.Emit(OpCodes.Br, lbTrue);
            ilg.MarkLabel(lbFalse);
            False.Emit(ilg);
            ilg.MarkLabel(lbTrue);

            if (!preserve)
            {
                ilg.Emit(OpCodes.Pop);
            }
        }