public override void Emit(ILGenerator gen, bool labelSetAlready)
{
if (!labelSetAlready) MarkLabel(gen);
Label condition = gen.DefineLabel();
Label start = gen.DefineLabel();
// Initialize
init.Emit(gen, true);
// Branch to condition label
gen.Emit(OpCodes.Br, condition);
// Mark start of loop
gen.MarkLabel(start);
// Execute loop
stmt.Emit(gen);
// Update counter
update.Emit(gen);
gen.MarkLabel(condition);
comparison.Emit(gen);
gen.Emit(OpCodes.Brtrue, start);
}