Pchp.CodeAnalysis.CodeGen.InstanceCacheHolder.EmitInstance C# (CSharp) Method

EmitInstance() private method

Emits , uses cached value if initialized already.
private EmitInstance ( CodeGenerator cg, Func emitter ) : TypeSymbol
cg CodeGenerator
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;
        }

Same methods

InstanceCacheHolder::EmitInstance ( InstanceCacheHolder holderOrNull, CodeGenerator cg, BoundExpression instance ) : TypeSymbol
InstanceCacheHolder::EmitInstance ( InstanceCacheHolder holderOrNull, CodeGenerator cg, Func emitter ) : TypeSymbol

Usage Example

Beispiel #1
0
 public static TypeSymbol EmitInstance(InstanceCacheHolder holderOrNull, CodeGenerator cg, Func<TypeSymbol> emitter)
 {
     if (holderOrNull != null)
     {
         return holderOrNull.EmitInstance(cg, emitter);
     }
     else
     {
         return emitter();
     }
 }