private EmitInstance ( |
||
cg | ||
emitter | Func |
|
return | TypeSymbol |
TypeSymbol EmitInstance(CodeGenerator cg, Func<TypeSymbol> emitter)
{
Debug.Assert(cg != null);
if (_instance_loc != null)
{
cg.Builder.EmitLocalLoad(_instance_loc);
}
else
{
_cg = cg;
// return (<loc> = <instance>);
_instance_loc = cg.GetTemporaryLocal(emitter());
cg.EmitOpCode(ILOpCode.Dup);
cg.Builder.EmitLocalStore(_instance_loc);
}
return (TypeSymbol)_instance_loc.Type;
}
InstanceCacheHolder::EmitInstance ( |
|
InstanceCacheHolder::EmitInstance ( |
public static TypeSymbol EmitInstance(InstanceCacheHolder holderOrNull, CodeGenerator cg, Func<TypeSymbol> emitter) { if (holderOrNull != null) { return holderOrNull.EmitInstance(cg, emitter); } else { return emitter(); } }