Author: martin
Date: 2006-09-19 09:33:32 -0400 (Tue, 19 Sep 2006)
New Revision: 65638
Modified:
trunk/mcs/gmcs/ChangeLog
trunk/mcs/gmcs/generic.cs
trunk/mcs/mcs/ChangeLog
trunk/mcs/mcs/ecore.cs
trunk/mcs/mcs/typemanager.cs
Log:
2006-09-19 Martin Baulig <[EMAIL PROTECTED]>
* typemanager.cs
(TypeManager.IsEqual): Moved the gmcs implementation here.
(TypeManager.DropGenericTypeArguments): Likewise.
(TypeManager.DropGenericMethodArguments): Likewise.
(TypeManager.GetTypeArguments): Moved here from gmcs.
(TypeManager.HasGenericArguments): Likewise.
Modified: trunk/mcs/gmcs/ChangeLog
===================================================================
--- trunk/mcs/gmcs/ChangeLog 2006-09-19 13:26:36 UTC (rev 65637)
+++ trunk/mcs/gmcs/ChangeLog 2006-09-19 13:33:32 UTC (rev 65638)
@@ -1,5 +1,14 @@
2006-09-19 Martin Baulig <[EMAIL PROTECTED]>
+ * generic.cs
+ (TypeManager.IsEqual): Moved into ../mcs/typemanager.cs.
+ (TypeManager.DropGenericTypeArguments): Likewise.
+ (TypeManager.DropGenericMethodArguments): Likewise.
+ (TypeManager.GetTypeArguments): Likewise.
+ (TypeManager.HasGenericArguments): Likewise.
+
+2006-09-19 Martin Baulig <[EMAIL PROTECTED]>
+
* ecore.cs (PropertyExpr.InstanceResolve): Fix the CS1540 check.
2006-09-19 Martin Baulig <[EMAIL PROTECTED]>
Modified: trunk/mcs/gmcs/generic.cs
===================================================================
--- trunk/mcs/gmcs/generic.cs 2006-09-19 13:26:36 UTC (rev 65637)
+++ trunk/mcs/gmcs/generic.cs 2006-09-19 13:33:32 UTC (rev 65638)
@@ -2058,67 +2058,6 @@
return ReflectionConstraints.GetConstraints (t);
}
- public static bool HasGenericArguments (Type t)
- {
- return GetNumberOfTypeArguments (t) > 0;
- }
-
- public static Type[] GetTypeArguments (Type t)
- {
- DeclSpace tc = LookupDeclSpace (t);
- if (tc != null) {
- if (!tc.IsGeneric)
- return Type.EmptyTypes;
-
- TypeParameter[] tparam = tc.TypeParameters;
- Type[] ret = new Type [tparam.Length];
- for (int i = 0; i < tparam.Length; i++) {
- ret [i] = tparam [i].Type;
- if (ret [i] == null)
- throw new
InternalErrorException ();
- }
-
- return ret;
- } else
- return t.GetGenericArguments ();
- }
-
- public static Type DropGenericTypeArguments (Type t)
- {
- if (!t.IsGenericType)
- return t;
- // Micro-optimization: a generic typebuilder is always
a generic type definition
- if (t is TypeBuilder)
- return t;
- return t.GetGenericTypeDefinition ();
- }
-
- public static MethodBase DropGenericMethodArguments (MethodBase
m)
- {
- if (m.IsGenericMethodDefinition)
- return m;
- if (m.IsGenericMethod)
- return ((MethodInfo)
m).GetGenericMethodDefinition ();
- if (!m.DeclaringType.IsGenericType)
- return m;
-
- Type t = m.DeclaringType.GetGenericTypeDefinition ();
- BindingFlags bf = BindingFlags.Public |
BindingFlags.NonPublic |
- BindingFlags.Static | BindingFlags.Instance |
BindingFlags.DeclaredOnly;
-
- if (m is ConstructorInfo) {
- foreach (ConstructorInfo c in t.GetConstructors
(bf))
- if (c.MetadataToken == m.MetadataToken)
- return c;
- } else {
- foreach (MethodBase mb in t.GetMethods (bf))
- if (mb.MetadataToken == m.MetadataToken)
- return mb;
- }
-
- return m;
- }
-
public static FieldInfo GetGenericFieldDefinition (FieldInfo fi)
{
if (fi.DeclaringType.IsGenericTypeDefinition ||
@@ -2136,48 +2075,6 @@
return fi;
}
- public static bool IsEqual (Type a, Type b)
- {
- if (a.Equals (b))
- return true;
-
- if (a.IsGenericParameter && b.IsGenericParameter) {
- if (a.DeclaringMethod != b.DeclaringMethod &&
- (a.DeclaringMethod == null ||
b.DeclaringMethod == null))
- return false;
- return a.GenericParameterPosition ==
b.GenericParameterPosition;
- }
-
- if (a.IsArray && b.IsArray) {
- if (a.GetArrayRank () != b.GetArrayRank ())
- return false;
- return IsEqual (a.GetElementType (),
b.GetElementType ());
- }
-
- if (a.IsByRef && b.IsByRef)
- return IsEqual (a.GetElementType (),
b.GetElementType ());
-
- if (a.IsGenericType && b.IsGenericType) {
- if (a.GetGenericTypeDefinition () !=
b.GetGenericTypeDefinition ())
- return false;
-
- Type[] aargs = a.GetGenericArguments ();
- Type[] bargs = b.GetGenericArguments ();
-
- if (aargs.Length != bargs.Length)
- return false;
-
- for (int i = 0; i < aargs.Length; i++) {
- if (!IsEqual (aargs [i], bargs [i]))
- return false;
- }
-
- return true;
- }
-
- return false;
- }
-
/// <summary>
/// Check whether `a' and `b' may become equal generic types.
/// The algorithm to do that is a little bit complicated.
Modified: trunk/mcs/mcs/ChangeLog
===================================================================
--- trunk/mcs/mcs/ChangeLog 2006-09-19 13:26:36 UTC (rev 65637)
+++ trunk/mcs/mcs/ChangeLog 2006-09-19 13:33:32 UTC (rev 65638)
@@ -1,5 +1,14 @@
2006-09-19 Martin Baulig <[EMAIL PROTECTED]>
+ * typemanager.cs
+ (TypeManager.IsEqual): Moved the gmcs implementation here.
+ (TypeManager.DropGenericTypeArguments): Likewise.
+ (TypeManager.DropGenericMethodArguments): Likewise.
+ (TypeManager.GetTypeArguments): Moved here from gmcs.
+ (TypeManager.HasGenericArguments): Likewise.
+
+2006-09-19 Martin Baulig <[EMAIL PROTECTED]>
+
* expression.cs (Binary): Merged with the gmcs version.
2006-09-19 Martin Baulig <[EMAIL PROTECTED]>
Modified: trunk/mcs/mcs/ecore.cs
===================================================================
--- trunk/mcs/mcs/ecore.cs 2006-09-19 13:26:36 UTC (rev 65637)
+++ trunk/mcs/mcs/ecore.cs 2006-09-19 13:33:32 UTC (rev 65638)
@@ -1890,6 +1890,11 @@
return name;
}
+ public SimpleName GetMethodGroup ()
+ {
+ return new SimpleName (RemoveGenericArity (Name), loc);
+ }
+
public static void Error_ObjectRefRequired (EmitContext ec,
Location l, string name)
{
if (ec.IsFieldInitializer)
Modified: trunk/mcs/mcs/typemanager.cs
===================================================================
--- trunk/mcs/mcs/typemanager.cs 2006-09-19 13:26:36 UTC (rev 65637)
+++ trunk/mcs/mcs/typemanager.cs 2006-09-19 13:33:32 UTC (rev 65638)
@@ -2677,23 +2677,121 @@
#endif
}
-#if !GMCS_SOURCE
public static bool IsEqual (Type a, Type b)
{
- return a.Equals (b);
+ if (a.Equals (b))
+ return true;
+
+#if GMCS_SOURCE
+ if (a.IsGenericParameter && b.IsGenericParameter) {
+ if (a.DeclaringMethod != b.DeclaringMethod &&
+ (a.DeclaringMethod == null || b.DeclaringMethod ==
null))
+ return false;
+ return a.GenericParameterPosition ==
b.GenericParameterPosition;
+ }
+
+ if (a.IsArray && b.IsArray) {
+ if (a.GetArrayRank () != b.GetArrayRank ())
+ return false;
+ return IsEqual (a.GetElementType (), b.GetElementType
());
+ }
+
+ if (a.IsByRef && b.IsByRef)
+ return IsEqual (a.GetElementType (), b.GetElementType
());
+
+ if (a.IsGenericType && b.IsGenericType) {
+ if (a.GetGenericTypeDefinition () !=
b.GetGenericTypeDefinition ())
+ return false;
+
+ Type[] aargs = a.GetGenericArguments ();
+ Type[] bargs = b.GetGenericArguments ();
+
+ if (aargs.Length != bargs.Length)
+ return false;
+
+ for (int i = 0; i < aargs.Length; i++) {
+ if (!IsEqual (aargs [i], bargs [i]))
+ return false;
+ }
+
+ return true;
+ }
+#endif
+
+ return false;
}
public static Type DropGenericTypeArguments (Type t)
{
+#if GMCS_SOURCE
+ if (!t.IsGenericType)
+ return t;
+ // Micro-optimization: a generic typebuilder is always a
generic type definition
+ if (t is TypeBuilder)
+ return t;
+ return t.GetGenericTypeDefinition ();
+#else
return t;
+#endif
}
public static MethodBase DropGenericMethodArguments (MethodBase m)
{
+#if GMCS_SOURCE
+ if (m.IsGenericMethodDefinition)
+ return m;
+ if (m.IsGenericMethod)
+ return ((MethodInfo) m).GetGenericMethodDefinition ();
+ if (!m.DeclaringType.IsGenericType)
+ return m;
+
+ Type t = m.DeclaringType.GetGenericTypeDefinition ();
+ BindingFlags bf = BindingFlags.Public | BindingFlags.NonPublic |
+ BindingFlags.Static | BindingFlags.Instance |
BindingFlags.DeclaredOnly;
+
+ if (m is ConstructorInfo) {
+ foreach (ConstructorInfo c in t.GetConstructors (bf))
+ if (c.MetadataToken == m.MetadataToken)
+ return c;
+ } else {
+ foreach (MethodBase mb in t.GetMethods (bf))
+ if (mb.MetadataToken == m.MetadataToken)
+ return mb;
+ }
+#endif
+
return m;
}
+
+ public static Type[] GetTypeArguments (Type t)
+ {
+#if GMCS_SOURCE
+ DeclSpace tc = LookupDeclSpace (t);
+ if (tc != null) {
+ if (!tc.IsGeneric)
+ return Type.EmptyTypes;
+
+ TypeParameter[] tparam = tc.TypeParameters;
+ Type[] ret = new Type [tparam.Length];
+ for (int i = 0; i < tparam.Length; i++) {
+ ret [i] = tparam [i].Type;
+ if (ret [i] == null)
+ throw new InternalErrorException ();
+ }
+
+ return ret;
+ } else
+ return t.GetGenericArguments ();
+#else
+ throw new InternalErrorException ();
#endif
+ }
+ public static bool HasGenericArguments (Type t)
+ {
+ return GetNumberOfTypeArguments (t) > 0;
+ }
+
public static int GetNumberOfTypeArguments (Type t)
{
#if GMCS_SOURCE
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches