public override void Emit(ObjExpr fn, TypeBuilder tb)
{
MethodBuilder mb = tb.DefineMethod(MethodName, MethodAttributes.ReuseSlot | MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig, ReturnType, ArgTypes);
SetCustomAttributes(mb);
CljILGen ilg = new CljILGen(mb.GetILGenerator());
Label loopLabel = ilg.DefineLabel();
GenContext.EmitDebugInfo(ilg, SpanMap);
try
{
Var.pushThreadBindings(RT.map(Compiler.LoopLabelVar,loopLabel,Compiler.MethodVar,this));
ilg.MarkLabel(loopLabel);
EmitBody(Objx,ilg,_retType,Body);
if ( Body.HasNormalExit() )
ilg.Emit(OpCodes.Ret);
}
finally
{
Var.popThreadBindings();
}
if (IsExplicit)
tb.DefineMethodOverride(mb, ExplicitMethodInfo);
}