Пример #1
0
        public frField(PropertyInfo property, AotData aot)
        {
            RawMember = property;

            var getMethod = property.GetGetMethod(/*nonPublic:*/ true);
            var setMethod = property.GetSetMethod(/*nonPublic:*/ true);

            IsField        = false;
            IsProperty     = true;
            IsAutoProperty = getMethod != null &&
                             setMethod != null &&
                             getMethod.GetCustomAttributes(typeof(CompilerGeneratedAttribute), /*inherit:*/ true) != null;

            Name       = property.Name;
            MemberType = property.PropertyType;
            Attributes = property.GetCustomAttributes(/*inherit:*/ true).OfType <Attribute>().ToArray();

            CanRead   = getMethod != null;
            CanWrite  = setMethod != null;
            RawReader = aot.Read ?? ((o) => property.GetValue(o, EmptyArgs));
            RawWriter = aot.Write ?? ((ref object o, object v) => { OneArg[0] = v; setMethod.Invoke(o, OneArg); OneArg[0] = null; });

            if (frConfig.HasJit && aot.Read == null)
            {
                TryToAotCompileReader(property);
            }
        }
Пример #2
0
        public frField(FieldInfo field, AotData aot)
        {
            RawMember = field;

            IsField        = true;
            IsProperty     = false;
            IsAutoProperty = false;

            Name       = field.Name;
            MemberType = field.FieldType;
            Attributes = (Attribute[])field.GetCustomAttributes(/*inherit:*/ true);

            CanRead   = true;
            CanWrite  = !field.IsLiteral;
            RawReader = aot.Read ?? field.GetValue;
            RawWriter = aot.Write ?? ((ref object o, object v) => field.SetValue(o, v));

            if (frConfig.HasJit && aot.Read == null)
            {
                TryToAotCompileReader(field);
            }
        }
Пример #3
0
 public frMethod(MethodInfo method, AotData aot)
 {
     RawMethod = method;
     Invoke    = aot.Invoke ?? method.Invoke;
 }