public virtual void Emit(RHC rhc, ObjExpr objx, CljILGen ilg)
{
//emitting a Fn means constructing an instance, feeding closed-overs from enclosing scope, if any
//objx arg is enclosing objx, not this
if (IsDefType)
ilg.Emit(OpCodes.Ldnull);
else
{
if (SupportsMeta)
{
ilg.Emit(OpCodes.Ldnull);
ilg.Emit(OpCodes.Castclass, typeof(IPersistentMap));
}
for (ISeq s = RT.keys(Closes); s != null; s = s.next())
{
LocalBinding lb = (LocalBinding)s.first();
if (lb.PrimitiveType != null)
objx.EmitUnboxedLocal(ilg, lb);
else
objx.EmitLocal(ilg, lb);
}
ilg.Emit(OpCodes.Newobj, CtorInfo);
}
if (rhc == RHC.Statement)
ilg.Emit(OpCodes.Pop);
}