/// <summary> /// Do Get Static Field Set Delegate /// </summary> /// <param name="targetModule"></param> /// <param name="fieldInfo"></param> /// <returns></returns> protected static StaticDynamicMethodProxyHandler DoGetStaticFieldSetDelegate( Module targetModule, FieldInfo fieldInfo ) { Check.Require(targetModule, "targetModule"); Check.Require(fieldInfo, "fieldInfo"); Check.Require(fieldInfo.IsStatic, "fieldInfo MUST be static here."); CodeGenerator gen = new CodeGenerator(targetModule); gen.BeginMethod("dm" + Guid.NewGuid().ToString("N"), typeof(StaticDynamicMethodProxyHandler)); gen.Ldarg(0); gen.Ldc(0); gen.Ldelem(typeof(object)); if (fieldInfo.FieldType.IsValueType) gen.UnboxAny(fieldInfo.FieldType); gen.StoreMember(fieldInfo); gen.Load(null); return (StaticDynamicMethodProxyHandler)gen.EndMethod(); }
public void SetMemberValue(CodeGenerator generator, ArgBuilder targetObject, string memberName, LocalBuilder memberValue) { MemberInfo memberInfo = ConvertorGeneratorHelper.GetMemberInfo(targetObject.ArgType, memberName); if (memberInfo != null) { generator.Ldarg(targetObject); generator.Ldloc(memberValue); generator.StoreMember(memberInfo); } }