return this;
}
+ public abstract bool __TryGetFieldOffset(out int offset);
+
+ public bool __TryGetFieldMarshal(out FieldMarshal fieldMarshal)
+ {
+ return FieldMarshal.ReadFieldMarshal(this.Module, GetCurrentToken(), out fieldMarshal);
+ }
+
internal abstract int ImportTo(Emit.ModuleBuilder module);
internal virtual FieldInfo BindTypeParameters(Type type)
{
return new FieldInfoWithReflectedType(type, this);
}
+
+ internal sealed override List<CustomAttributeData> GetPseudoCustomAttributes(Type attributeType)
+ {
+ Module module = this.Module;
+ List<CustomAttributeData> list = new List<CustomAttributeData>();
+ if (attributeType == null || attributeType.IsAssignableFrom(module.universe.System_Runtime_InteropServices_MarshalAsAttribute))
+ {
+ FieldMarshal spec;
+ if (__TryGetFieldMarshal(out spec))
+ {
+ list.Add(CustomAttributeData.CreateMarshalAsPseudoCustomAttribute(module, spec));
+ }
+ }
+ if (attributeType == null || attributeType.IsAssignableFrom(module.universe.System_Runtime_InteropServices_FieldOffsetAttribute))
+ {
+ int offset;
+ if (__TryGetFieldOffset(out offset))
+ {
+ list.Add(CustomAttributeData.CreateFieldOffsetPseudoCustomAttribute(module, offset));
+ }
+ }
+ return list;
+ }
}
sealed class FieldInfoWithReflectedType : FieldInfo
get { return field.__FieldRVA; }
}
+ public override bool __TryGetFieldOffset(out int offset)
+ {
+ return field.__TryGetFieldOffset(out offset);
+ }
+
public override Object GetRawConstantValue()
{
return field.GetRawConstantValue();
return reflectedType.GetHashCode() ^ field.GetHashCode();
}
- internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
- {
- return field.GetCustomAttributesData(attributeType);
- }
-
public override int MetadataToken
{
get { return field.MetadataToken; }
{
return field.ToString();
}
+
+ internal override int GetCurrentToken()
+ {
+ return field.GetCurrentToken();
+ }
+
+ internal override bool IsBaked
+ {
+ get { return field.IsBaked; }
+ }
}
}