Microsoft.JScript.Class.EmitILForINeedEngineMethods C# (CSharp) Method

EmitILForINeedEngineMethods() private method

private EmitILForINeedEngineMethods ( ) : void
return void
      private void EmitILForINeedEngineMethods(){
        if (!this.needsEngine)
          return;
        TypeBuilder classwriter = (TypeBuilder)this.classob.classwriter;
        FieldBuilder backingField = classwriter.DefineField("vsa Engine", Typeob.VsaEngine, FieldAttributes.Private | FieldAttributes.NotSerialized);
        
        MethodBuilder getMeth = classwriter.DefineMethod("GetEngine", MethodAttributes.Private|MethodAttributes.Virtual, Typeob.VsaEngine, null);
        ILGenerator il = getMeth.GetILGenerator();
        il.Emit(OpCodes.Ldarg_0);
        il.Emit(OpCodes.Ldfld, backingField);
        il.Emit(OpCodes.Ldnull);
        Label endif = il.DefineLabel();
        il.Emit(OpCodes.Bne_Un_S, endif);
        il.Emit(OpCodes.Ldarg_0);
        if (this.body.Engine.doCRS)        
          il.Emit(OpCodes.Ldsfld, CompilerGlobals.contextEngineField);
        else {
          if (this.context.document.engine.PEFileKind == PEFileKinds.Dll){
            il.Emit(OpCodes.Ldtoken, classwriter);
            il.Emit(OpCodes.Call, CompilerGlobals.createVsaEngineWithType);
          }else
            il.Emit(OpCodes.Call, CompilerGlobals.createVsaEngine);
        }

        il.Emit(OpCodes.Stfld, backingField);
        il.MarkLabel(endif);
        il.Emit(OpCodes.Ldarg_0);
        il.Emit(OpCodes.Ldfld, backingField);
        il.Emit(OpCodes.Ret);
        classwriter.DefineMethodOverride(getMeth, CompilerGlobals.getEngineMethod);
        
        MethodBuilder setMeth = classwriter.DefineMethod("SetEngine", MethodAttributes.Private|MethodAttributes.Virtual, Typeob.Void, new Type[]{Typeob.VsaEngine});
        il = setMeth.GetILGenerator();
        il.Emit(OpCodes.Ldarg_0);
        il.Emit(OpCodes.Ldarg_1);
        il.Emit(OpCodes.Stfld, backingField);
        il.Emit(OpCodes.Ret);
        classwriter.DefineMethodOverride(setMeth, CompilerGlobals.setEngineMethod);
      }