public override void GenerateCode(ILGenerator codeGenerator, TypeBuilder typeBuilder, ModuleBuilder moduleBuilder)
{
Label forStart = codeGenerator.DefineLabel();
Label forEnd = codeGenerator.DefineLabel();
EndLabel = forEnd;
InitExp.GenerateCode(codeGenerator, typeBuilder, moduleBuilder);
UpperBoundExp.GenerateCode(codeGenerator, typeBuilder, moduleBuilder);
codeGenerator.MarkLabel(forStart);
codeGenerator.Emit(OpCodes.Dup);
codeGenerator.Emit(OpCodes.Ldsfld, InitExp.ForVariableBuilder);
codeGenerator.Emit(OpCodes.Blt, forEnd);
BodyExp.GenerateCode(codeGenerator, typeBuilder, moduleBuilder);
codeGenerator.Emit(OpCodes.Ldsfld, InitExp.ForVariableBuilder);
codeGenerator.Emit(OpCodes.Ldc_I4_1);
codeGenerator.Emit(OpCodes.Add);
codeGenerator.Emit(OpCodes.Stsfld, InitExp.ForVariableBuilder);
codeGenerator.Emit(OpCodes.Br, forStart);
codeGenerator.MarkLabel(forEnd);
codeGenerator.Emit(OpCodes.Pop);
InitExp.RestoreVariable(codeGenerator);
}