internal MethodInfo GetExpandoIndexerSetter(){
if (this.setItem == null){
TypeBuilder classwriter = this.classob.GetTypeBuilder();
this.GetExpandoFieldGetter(classwriter);
// create the setter
this.setItem = classwriter.DefineMethod("set_Item", MethodAttributes.Public|MethodAttributes.SpecialName, Typeob.Void, new Type[2]{Typeob.String, Typeob.Object});
ILGenerator il = this.setItem.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Call, this.getHashTableMethod);
il.Emit(OpCodes.Ldarg_2);
il.Emit(OpCodes.Ldsfld, CompilerGlobals.missingField);
Label endif = il.DefineLabel();
il.Emit(OpCodes.Beq_S, endif);
il.Emit(OpCodes.Ldarg_1);
il.Emit(OpCodes.Ldarg_2);
il.Emit(OpCodes.Call, CompilerGlobals.hashtableSetItem);
il.Emit(OpCodes.Ret);
il.MarkLabel(endif);
il.Emit(OpCodes.Ldarg_1);
il.Emit(OpCodes.Call, CompilerGlobals.hashtableRemove);
il.Emit(OpCodes.Ret);
this.expandoItemProp.SetSetMethod(this.setItem);
}
return this.setItem;
}