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); }
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); } }