public void Emit(RHC rhc, ObjExpr objx, CljILGen ilg)
{
objx.EmitVar(ilg, _var);
if (_isDynamic)
{
ilg.Emit(OpCodes.Call, Compiler.Method_Var_setDynamic0);
}
if (_meta != null)
{
if (_initProvided || true) //IncludesExplicitMetadata((MapExpr)_meta))
{
ilg.Emit(OpCodes.Dup);
_meta.Emit(RHC.Expression, objx, ilg);
ilg.Emit(OpCodes.Castclass, typeof(IPersistentMap));
ilg.Emit(OpCodes.Call, Compiler.Method_Var_setMeta);
}
}
if (_initProvided)
{
ilg.Emit(OpCodes.Dup);
if (_init is FnExpr)
{
((FnExpr)_init).EmitForDefn(objx, ilg);
}
else
{
_init.Emit(RHC.Expression, objx, ilg);
}
ilg.Emit(OpCodes.Call, Compiler.Method_Var_bindRoot);
}
if (rhc == RHC.Statement)
{
ilg.Emit(OpCodes.Pop);
}
}