internal CompiledPropertyFieldWrapper(TypeWrapper declaringType, PropertyInfo property, ExModifiers modifiers) : base(declaringType, ClassLoaderWrapper.GetWrapperFromType(property.PropertyType), property.Name, ClassLoaderWrapper.GetWrapperFromType(property.PropertyType).SigName, modifiers, null) { this.property = property; }
internal VolatileLongDoubleFieldWrapper(TypeWrapper declaringType, TypeWrapper fieldType, FieldInfo fi, string name, string sig, ExModifiers modifiers) : base(declaringType, fieldType, name, sig, modifiers, fi) { Debug.Assert(IsVolatile); Debug.Assert(sig == "J" || sig == "D"); }
internal SimpleFieldWrapper(TypeWrapper declaringType, TypeWrapper fieldType, FieldInfo fi, string name, string sig, ExModifiers modifiers) : base(declaringType, fieldType, name, sig, modifiers, fi) { Debug.Assert(!(fieldType == PrimitiveTypeWrapper.DOUBLE || fieldType == PrimitiveTypeWrapper.LONG) || !IsVolatile); }
internal static FieldWrapper Create(TypeWrapper declaringType, TypeWrapper fieldType, FieldInfo fi, string name, string sig, ExModifiers modifiers) { // volatile long & double field accesses must be made atomic if((modifiers.Modifiers & Modifiers.Volatile) != 0 && (sig == "J" || sig == "D")) { return new VolatileLongDoubleFieldWrapper(declaringType, fieldType, fi, name, sig, modifiers); } return new SimpleFieldWrapper(declaringType, fieldType, fi, name, sig, modifiers); }
internal FieldWrapper(TypeWrapper declaringType, TypeWrapper fieldType, string name, string sig, ExModifiers modifiers, FieldInfo field) : this(declaringType, fieldType, name, sig, modifiers.Modifiers, field, (modifiers.IsInternal ? MemberFlags.InternalAccess : MemberFlags.None)) { }
// NOTE fi may be null! internal GetterFieldWrapper(TypeWrapper declaringType, TypeWrapper fieldType, FieldInfo fi, string name, string sig, ExModifiers modifiers, MethodInfo getter, PropertyInfo prop) : base(declaringType, fieldType, name, sig, modifiers, fi) { Debug.Assert(!IsVolatile); this.getter = getter; this.prop = prop; }