Exemplo n.º 1
0
        public static SetMemberDelegate SetEmit(PropertyInfo propertyInfo)
        {
            var mi = propertyInfo.GetSetMethod(true);

            if (mi == null)
            {
                return(null);
            }

            var setter = FieldInvoker.CreateDynamicSetMethod(propertyInfo);

            var gen = setter.GetILGenerator();

            gen.Emit(OpCodes.Ldarg_0);

            gen.Emit(
                propertyInfo.DeclaringType.IsValueType ? OpCodes.Unbox : OpCodes.Castclass,
                propertyInfo.DeclaringType);

            gen.Emit(OpCodes.Ldarg_1);

            gen.Emit(
                propertyInfo.PropertyType.IsValueType ? OpCodes.Unbox_Any : OpCodes.Castclass,
                propertyInfo.PropertyType);

            gen.EmitCall(mi.IsFinal ? OpCodes.Call : OpCodes.Callvirt, mi, (Type[])null);

            gen.Emit(OpCodes.Ret);

            return((SetMemberDelegate)setter.CreateDelegate(typeof(SetMemberDelegate)));
        }
Exemplo n.º 2
0
        public static GetMemberDelegate GetEmit(PropertyInfo propertyInfo)
        {
            var getter = FieldInvoker.CreateDynamicGetMethod(propertyInfo);

            var gen = getter.GetILGenerator();

            gen.Emit(OpCodes.Ldarg_0);

            if (propertyInfo.DeclaringType.IsValueType)
            {
                gen.Emit(OpCodes.Unbox, propertyInfo.DeclaringType);
            }
            else
            {
                gen.Emit(OpCodes.Castclass, propertyInfo.DeclaringType);
            }

            var mi = propertyInfo.GetGetMethod(true);

            gen.Emit(mi.IsFinal ? OpCodes.Call : OpCodes.Callvirt, mi);

            if (propertyInfo.PropertyType.IsValueType)
            {
                gen.Emit(OpCodes.Box, propertyInfo.PropertyType);
            }

            gen.Emit(OpCodes.Ret);

            return((GetMemberDelegate)getter.CreateDelegate(typeof(GetMemberDelegate)));
        }
Exemplo n.º 3
0
        static TypeFields()
        {
            Instance.Type             = typeof(T);
            Instance.PublicFieldInfos = typeof(T).GetPublicFields();
            foreach (var fi in Instance.PublicFieldInfos)
            {
                try
                {
                    var fnRef = FieldInvoker <T> .CreateExpressionRefSetter(fi);// fi.SetExpressionRef<T>();

                    Instance.FieldsMap[fi.Name] = new FieldAccessor(
                        fi,
                        PclExport.Instance.CreateGetter(fi),
                        PclExport.Instance.CreateSetter(fi),
                        delegate(ref object instance, object arg)
                    {
                        var valueInstance = (T)instance;
                        fnRef(ref valueInstance, arg);
                        instance = valueInstance;
                    });
                }
                catch (Exception ex)
                {
                    Tracer.Instance.WriteError(ex);
                }
            }
        }
Exemplo n.º 4
0
 public override SetMemberDelegate CreateSetter(FieldInfo fieldInfo)
 {
     return
         (SupportsEmit ? FieldInvoker.SetEmit(fieldInfo) :
          SupportsExpression
             ? FieldInvoker.SetExpression(fieldInfo)
             : base.CreateSetter(fieldInfo));
 }
Exemplo n.º 5
0
 public override GetMemberDelegate <T> CreateGetter <T>(FieldInfo fieldInfo)
 {
     return
         (SupportsEmit ? FieldInvoker.GetEmit <T>(fieldInfo) :
          SupportsExpression
             ? FieldInvoker.GetExpression <T>(fieldInfo)
             : base.CreateGetter <T>(fieldInfo));
 }
Exemplo n.º 6
0
 public override MemberSetter CreateSetter(FieldInfo fieldInfo)
 {
     return
         (SupportsEmit ? FieldInvoker.CreateEmitSetter(fieldInfo) :
          SupportsExpression
             ? FieldInvoker.CreateExpressionSetter(fieldInfo)
             : base.CreateSetter(fieldInfo));
 }
Exemplo n.º 7
0
 public override MemberGetter <T> CreateGetter <T>(FieldInfo fieldInfo)
 {
     return
         (SupportsEmit ? FieldInvoker <T> .CreateEmitGetter(fieldInfo) :
          SupportsExpression
             ? FieldInvoker <T> .CreateExpressionGetter(fieldInfo)
             : base.CreateGetter <T>(fieldInfo));
 }
Exemplo n.º 8
0
        public override GetMemberDelegate CreateGetter(FieldInfo fieldInfo)
        {
            return
                (#if NET472
                 this.SupportsEmit ? FieldInvoker.GetEmit(fieldInfo) :
#endif
                 this.SupportsExpression
                    ? FieldInvoker.GetExpression(fieldInfo)
                    : base.CreateGetter(fieldInfo));
        }
Exemplo n.º 9
0
        public override SetMemberDelegate CreateSetter(FieldInfo fieldInfo)
        {
            return
                (#if NETSTANDARD2_0
                 SupportsEmit ? FieldInvoker.SetEmit(fieldInfo) :
#endif
                 SupportsExpression
                    ? FieldInvoker.SetExpression(fieldInfo)
                    : base.CreateSetter(fieldInfo));
        }
Exemplo n.º 10
0
        public override GetMemberDelegate <T> CreateGetter <T>(FieldInfo fieldInfo)
        {
            return
                (#if NETSTANDARD2_0
                 SupportsEmit ? FieldInvoker.GetEmit <T>(fieldInfo) :
#endif
                 SupportsExpression
                    ? FieldInvoker.GetExpression <T>(fieldInfo)
                    : base.CreateGetter <T>(fieldInfo));
        }
Exemplo n.º 11
0
 public override SetMemberDelegate <T> CreateSetter <T>(FieldInfo fieldInfo)
 {
     return(this.SupportsExpression
         ? FieldInvoker.SetExpression <T>(fieldInfo)
         : base.CreateSetter <T>(fieldInfo));
 }