public static IILGenerator Ldarg(this IILGenerator gen, byte argIndex) { switch (argIndex) { case 0: gen.Ldarg_0(); break; case 1: gen.Ldarg_1(); break; case 2: gen.Ldarg_2(); break; case 3: gen.Ldarg_3(); break; default: gen.Ldarg_S(argIndex); break; } return(gen); }
public static ByRefGetter <TInstance, TField> StructGetField <TInstance, TField>(FieldInfo field) where TInstance : struct { DynamicMethod getter = new DynamicMethod($"get_{field.DeclaringType.Name}_{field.Name}", typeof(TField), new Type[] { typeof(TInstance).MakeByRefType() }, typeof(Dynamic), true); IILGenerator gen = getter.GetILGenerator().AsInterface(); gen .Ldarg_0() .Ldfld(field) .Ret(); return((ByRefGetter <TInstance, TField>)getter.CreateDelegate(typeof(ByRefGetter <TInstance, TField>))); }
public static Action <TField> StaticSetField <TField>(FieldInfo field) { DynamicMethod getter = new DynamicMethod($"set_{field.DeclaringType.Name}_{field.Name}", null, new Type[] { typeof(TField) }, typeof(Dynamic), true); IILGenerator gen = getter.GetILGenerator().AsInterface(); gen .Ldarg_0() .Stsfld(field) .Ret(); return((Action <TField>)getter.CreateDelegate(typeof(Action <TField>))); }
public static Setter <TInstance, TField> InstanceSetField <TInstance, TField>(FieldInfo field) where TInstance : class { DynamicMethod getter = new DynamicMethod($"set_{field.DeclaringType.Name}_{field.Name}", null, new Type[] { typeof(TInstance), typeof(TField) }, typeof(Dynamic), true); IILGenerator gen = getter.GetILGenerator().AsInterface(); gen .Ldarg_0() .Ldarg_1() .Stfld(field) .Ret(); return((Setter <TInstance, TField>)getter.CreateDelegate(typeof(Setter <TInstance, TField>))); }