New test.
[mono.git] / mcs / class / corlib / System.Reflection / MonoGenericClass.cs
index 2e85f497b829a98a04281df003a7c0d948c33a56..345b5d99c68c21cb67a8ca94ffb3de6fb346353f 100644 (file)
@@ -96,7 +96,7 @@ namespace System.Reflection
                        if (initialized)
                                return;
 
-                       MonoGenericClass parent = GetParentType ();
+                       MonoGenericClass parent = GetParentType () as MonoGenericClass;
                        if (parent != null)
                                parent.initialize ();
 
@@ -110,14 +110,14 @@ namespace System.Reflection
                }
 
                [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               protected extern MonoGenericClass GetParentType ();
+               protected extern Type GetParentType ();
 
                [MethodImplAttribute(MethodImplOptions.InternalCall)]
                protected extern MonoGenericClass[] GetInterfaces_internal ();
 
                public override Type BaseType {
                        get {
-                               MonoGenericClass parent = GetParentType ();
+                               Type parent = GetParentType ();
                                return parent != null ? parent : generic_type.BaseType;
                        }
                }
@@ -518,5 +518,28 @@ namespace System.Reflection
                {
                        return generic_type.GetNestedTypes (bf);
                }
+
+               public override bool IsAssignableFrom (Type c)
+               {
+                       if (c == this)
+                               return true;
+
+                       MonoGenericClass[] interfaces = GetInterfaces_internal ();
+
+                       if (c.IsInterface) {
+                               if (interfaces == null)
+                                       return false;
+                               foreach (Type t in interfaces)
+                                       if (c.IsAssignableFrom (t))
+                                               return true;
+                               return false;
+                       }
+
+                       Type parent = GetParentType ();
+                       if (parent == null)
+                               return c == typeof (object);
+                       else
+                               return c.IsAssignableFrom (parent);
+               }
        }
 }