+ public override Type MakeArrayType ()
+ {
+ return new ArrayType (this, 0);
+ }
+
+ public override Type MakeArrayType (int rank)
+ {
+ if (rank < 1)
+ throw new IndexOutOfRangeException ();
+ return new ArrayType (this, rank);
+ }
+
+ public override Type MakeByRefType ()
+ {
+ return new ByRefType (this);
+ }
+
+ public override Type MakeGenericType (params Type [] typeArguments)
+ {
+ //return base.MakeGenericType (typeArguments);
+
+ if (!IsGenericTypeDefinition)
+ throw new InvalidOperationException ("not a generic type definition");
+ if (typeArguments == null)
+ throw new ArgumentNullException ("typeArguments");
+
+ if (generic_params.Length != typeArguments.Length)
+ throw new ArgumentException (String.Format ("The type or method has {0} generic parameter(s) but {1} generic argument(s) where provided. A generic argument must be provided for each generic parameter.", generic_params.Length, typeArguments.Length), "typeArguments");
+
+ foreach (Type t in typeArguments) {
+ if (t == null)
+ throw new ArgumentNullException ("typeArguments");
+ }
+
+ Type[] copy = new Type [typeArguments.Length];
+ typeArguments.CopyTo (copy, 0);
+ return pmodule.assemblyb.MakeGenericType (this, copy);
+ }
+
+ public override Type MakePointerType ()
+ {
+ return new PointerType (this);
+ }
+
+ public override RuntimeTypeHandle TypeHandle {
+ get {