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

GetExpandoFieldGetter() private method

private GetExpandoFieldGetter ( TypeBuilder classwriter ) : void
classwriter System.Reflection.Emit.TypeBuilder
return void
      private void GetExpandoFieldGetter(TypeBuilder classwriter){
        if (this.expandoItemProp == null){
          this.expandoItemProp = classwriter.DefineProperty("Item", PropertyAttributes.None, Typeob.Object, new Type[]{Typeob.String});
     
          // if it is an expando, generate a SimpleHashtable field called 'expando table'
          FieldInfo expandoTableField = classwriter.DefineField("expando table", Typeob.SimpleHashtable, FieldAttributes.Private);

          // generate code for a hashtable getter. It will initialize the hashtable if null
          this.getHashTableMethod = classwriter.DefineMethod("get expando table", MethodAttributes.Private, Typeob.SimpleHashtable, null);
          ILGenerator il = this.getHashTableMethod.GetILGenerator();
          il.Emit(OpCodes.Ldarg_0);
          il.Emit(OpCodes.Ldfld, expandoTableField);
          il.Emit(OpCodes.Ldnull);
          Label endif = il.DefineLabel();
          il.Emit(OpCodes.Bne_Un_S, endif);
          il.Emit(OpCodes.Ldarg_0);
          il.Emit(OpCodes.Ldc_I4_8);
          il.Emit(OpCodes.Newobj, CompilerGlobals.hashtableCtor);
          il.Emit(OpCodes.Stfld, expandoTableField);
          il.MarkLabel(endif);
          il.Emit(OpCodes.Ldarg_0);
          il.Emit(OpCodes.Ldfld, expandoTableField);
          il.Emit(OpCodes.Ret);
        }
      }