Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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>)));
        }
Ejemplo n.º 3
0
        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>)));
        }
Ejemplo n.º 4
0
        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>)));
        }