2009-07-28 Rodrigo Kumpera <rkumpera@novell.com>
[mono.git] / mcs / class / corlib / System.Reflection.Emit / DerivedTypes.cs
index 1d0ebe0c9c6a3ad1b056280448babedc50a277f8..640029daabf2e26ec298c9d3351bd5a94bfb22b1 100644 (file)
@@ -201,7 +201,16 @@ namespace System.Reflection.Emit
                        return false;
                }
 
-#if NET_2_0
+               public override bool IsAssignableFrom (Type c)
+               {
+                       return false;
+               }
+
+#if NET_2_0 || BOOTSTRAP_NET_2_0
+               public override bool ContainsGenericParameters {
+                       get { return elementType.ContainsGenericParameters; }
+               }
+
                //FIXME this should be handled by System.Type
                public override Type MakeGenericType (params Type[] typeArguments)
                {
@@ -244,7 +253,12 @@ namespace System.Reflection.Emit
                }
 
                public override string AssemblyQualifiedName {
-                       get { return FullName + ", " + elementType.Assembly.FullName; }
+                       get {
+                               string fullName = FormatName (elementType.FullName);
+                               if (fullName == null)
+                                       return null;
+                               return fullName + ", " + elementType.Assembly.FullName;
+                       }
                }
 
 
@@ -277,7 +291,10 @@ namespace System.Reflection.Emit
                }
 
                public override Type UnderlyingSystemType {
-                       get { return this; }
+                       get {
+                               create_unmanaged_type (this);
+                               return this;
+                       }
                }
 
                //MemberInfo
@@ -320,8 +337,17 @@ namespace System.Reflection.Emit
                        get { return typeof (System.Array); }
                }
 
+               protected override TypeAttributes GetAttributeFlagsImpl ()
+               {
+                       if (((ModuleBuilder)elementType.Module).assemblyb.IsCompilerContext)
+                               return (elementType.Attributes & TypeAttributes.VisibilityMask) | TypeAttributes.Sealed | TypeAttributes.Serializable;
+                       return elementType.Attributes;
+               }
+
                internal override String FormatName (string elementName)
                {
+                       if (elementName == null)
+                               return null;
                        StringBuilder sb = new StringBuilder (elementName);
                        sb.Append ("[");
                        for (int i = 1; i < rank; ++i)
@@ -344,14 +370,17 @@ namespace System.Reflection.Emit
                }
 
                public override Type BaseType {
-                       get { return null; }
+                       get { return typeof (Array); }
                }
 
                internal override String FormatName (string elementName)
                {
+                       if (elementName == null)
+                               return null;
                        return elementName + "&";
                }
 
+#if NET_2_0
                public override Type MakeArrayType ()
                {
                        throw new ArgumentException ("Cannot create an array type of a byref type");
@@ -371,6 +400,7 @@ namespace System.Reflection.Emit
                {
                        throw new ArgumentException ("Cannot create a pointer type of a byref type");
                }
+#endif
        }
 
 
@@ -386,11 +416,13 @@ namespace System.Reflection.Emit
                }
 
                public override Type BaseType {
-                       get { return null; }
+                       get { return typeof(Array); }
                }
 
                internal override String FormatName (string elementName)
                {
+                       if (elementName == null)
+                               return null;
                        return elementName + "*";
                }
        }