public static readonly TypeFilter FilterTypeName;
public static readonly TypeFilter FilterTypeNameIgnoreCase;
+#pragma warning disable 649
private IntPtr _impl; /* a pointer to a MonoImage */
internal Assembly assembly;
internal string fqname;
internal string scopename;
internal bool is_resource;
internal int token;
+#pragma warning restore 649
const BindingFlags defaultBindingFlags =
BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance;
get;
}
- public extern int MDStreamVersion {
- [MethodImplAttribute (MethodImplOptions.InternalCall)]
- get;
+ public int MDStreamVersion {
+ get {
+ if (_impl == IntPtr.Zero)
+ throw new NotSupportedException ();
+ return GetMDStreamVersion (_impl);
+ }
}
+
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]
+ internal static extern int GetMDStreamVersion (IntPtr module_handle);
#endif
public virtual Type[] FindTypes(TypeFilter filter, object filterCriteria)
return (globalType != null) ? globalType.GetField (name, BindingFlags.Public | BindingFlags.Static) : null;
}
- public FieldInfo GetField (string name, BindingFlags flags)
+ public FieldInfo GetField (string name, BindingFlags bindingAttr)
{
if (IsResource ())
return null;
Type globalType = GetGlobalType ();
- return (globalType != null) ? globalType.GetField (name, flags) : null;
+ return (globalType != null) ? globalType.GetField (name, bindingAttr) : null;
}
public FieldInfo[] GetFields ()
}
#if NET_2_0
- public MethodInfo[] GetMethods (BindingFlags flags) {
+ public MethodInfo[] GetMethods (BindingFlags bindingFlags) {
if (IsResource ())
return new MethodInfo [0];
Type globalType = GetGlobalType ();
- return (globalType != null) ? globalType.GetMethods (flags) : new MethodInfo [0];
+ return (globalType != null) ? globalType.GetMethods (bindingFlags) : new MethodInfo [0];
}
- public FieldInfo[] GetFields (BindingFlags flags)
+ public FieldInfo[] GetFields (BindingFlags bindingFlags)
{
if (IsResource ())
return new FieldInfo [0];
Type globalType = GetGlobalType ();
- return (globalType != null) ? globalType.GetFields (flags) : new FieldInfo [0];
+ return (globalType != null) ? globalType.GetFields (bindingFlags) : new FieldInfo [0];
}
#endif
return new ArgumentException (String.Format ("Token 0x{0:x} is not a valid {1} token in the scope of module {2}", metadataToken, tokenType, name), "metadataToken");
}
+ private IntPtr[] ptrs_from_types (Type[] types) {
+ if (types == null)
+ return null;
+ else {
+ IntPtr[] res = new IntPtr [types.Length];
+ for (int i = 0; i < types.Length; ++i) {
+ if (types [i] == null)
+ throw new ArgumentException ();
+ res [i] = types [i].TypeHandle.Value;
+ }
+ return res;
+ }
+ }
+
public FieldInfo ResolveField (int metadataToken) {
+ return ResolveField (metadataToken, null, null);
+ }
+
+ public FieldInfo ResolveField (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) {
ResolveTokenError error;
- IntPtr handle = ResolveFieldToken (_impl, metadataToken, out error);
+ IntPtr handle = ResolveFieldToken (_impl, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error);
if (handle == IntPtr.Zero)
throw resolve_token_exception (metadataToken, error, "Field");
else
}
public MemberInfo ResolveMember (int metadataToken) {
+ return ResolveMember (metadataToken, null, null);
+ }
+
+ public MemberInfo ResolveMember (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) {
+
ResolveTokenError error;
- MemberInfo m = ResolveMemberToken (_impl, metadataToken, out error);
+ MemberInfo m = ResolveMemberToken (_impl, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error);
if (m == null)
throw resolve_token_exception (metadataToken, error, "MemberInfo");
else
}
public MethodBase ResolveMethod (int metadataToken) {
+ return ResolveMethod (metadataToken, null, null);
+ }
+
+ public MethodBase ResolveMethod (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) {
ResolveTokenError error;
- IntPtr handle = ResolveMethodToken (_impl, metadataToken, out error);
+ IntPtr handle = ResolveMethodToken (_impl, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error);
if (handle == IntPtr.Zero)
throw resolve_token_exception (metadataToken, error, "MethodBase");
else
}
public Type ResolveType (int metadataToken) {
+ return ResolveType (metadataToken, null, null);
+ }
+
+ public Type ResolveType (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) {
ResolveTokenError error;
- IntPtr handle = ResolveTypeToken (_impl, metadataToken, out error);
+ IntPtr handle = ResolveTypeToken (_impl, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error);
if (handle == IntPtr.Zero)
throw resolve_token_exception (metadataToken, error, "Type");
else
return Type.GetTypeFromHandle (new RuntimeTypeHandle (handle));
}
- [MonoTODO]
public byte[] ResolveSignature (int metadataToken) {
- throw new NotImplementedException ();
+ ResolveTokenError error;
+
+ byte[] res = ResolveSignature (_impl, metadataToken, out error);
+ if (res == null)
+ throw resolve_token_exception (metadataToken, error, "signature");
+ else
+ return res;
}
#endif
{
ResolveTokenError error;
- IntPtr handle = ResolveTypeToken (module._impl, token, out error);
+ IntPtr handle = ResolveTypeToken (module._impl, token, null, null, out error);
if (handle == IntPtr.Zero)
return null;
else
return String.Compare (m.Name, s, true) == 0;
}
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]
+ internal extern IntPtr GetHINSTANCE ();
+
[MethodImplAttribute (MethodImplOptions.InternalCall)]
private extern string GetGuidInternal ();
private extern Type GetGlobalType ();
[MethodImplAttribute (MethodImplOptions.InternalCall)]
- internal static extern IntPtr ResolveTypeToken (IntPtr module, int token, out ResolveTokenError error);
+ internal static extern IntPtr ResolveTypeToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error);
[MethodImplAttribute (MethodImplOptions.InternalCall)]
- internal static extern IntPtr ResolveMethodToken (IntPtr module, int token, out ResolveTokenError error);
+ internal static extern IntPtr ResolveMethodToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error);
[MethodImplAttribute (MethodImplOptions.InternalCall)]
- internal static extern IntPtr ResolveFieldToken (IntPtr module, int token, out ResolveTokenError error);
+ internal static extern IntPtr ResolveFieldToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error);
[MethodImplAttribute (MethodImplOptions.InternalCall)]
internal static extern string ResolveStringToken (IntPtr module, int token, out ResolveTokenError error);
[MethodImplAttribute (MethodImplOptions.InternalCall)]
- internal static extern MemberInfo ResolveMemberToken (IntPtr module, int token, out ResolveTokenError error);
+ internal static extern MemberInfo ResolveMemberToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error);
+
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]
+ internal static extern byte[] ResolveSignature (IntPtr module, int metadataToken, out ResolveTokenError error);
[MethodImplAttribute (MethodImplOptions.InternalCall)]
internal static extern void GetPEKind (IntPtr module, out PortableExecutableKinds peKind, out ImageFileMachine machine);