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);
}
}