//
// Author:
// Paolo Molaro (lupus@ximian.com)
+// Marek Safar (marek.safar@gmail.com)
//
// (C) 2001 Ximian, Inc. http://www.ximian.com
//
System.Array.Copy (interfaces, this.interfaces, interfaces.Length);
}
pmodule = mb;
+
// skip .<Module> ?
table_idx = mb.get_next_table_index (this, 0x02, true);
setup_internal_class (this);
return false;
}*/
- [MonoTODO]
public override Type UnderlyingSystemType {
get {
-
- // Return this as requested by Zoltan.
-
return this;
-
-#if false
- // Dont know what to do with the rest, should be killed:
- // See bug: 75008.
- //
- ////// This should return the type itself for non-enum types but
- ////// that breaks mcs.
- if (fields != null) {
- foreach (FieldBuilder f in fields) {
- if ((f != null) && (f.Attributes & FieldAttributes.Static) == 0)
- return f.FieldType;
- }
- }
- throw new InvalidOperationException ("Underlying type information on enumeration is not specified.");
-#endif
}
}
if (created != null)
return created;
+ if (!IsInterface && (parent == null) && (this != pmodule.assemblyb.corlib_object_type) && (FullName != "<Module>")) {
+ SetParent (pmodule.assemblyb.corlib_object_type);
+ }
+
create_generic_class ();
// Fire TypeResolve events for fields whose type is an unfinished
}
public override FieldInfo GetField( string name, BindingFlags bindingAttr) {
+ if (created != null)
+ return created.GetField (name, bindingAttr);
+
if (fields == null)
return null;
}
public override FieldInfo[] GetFields (BindingFlags bindingAttr) {
+ if (created != null)
+ return created.GetFields (bindingAttr);
+
if (fields == null)
return new FieldInfo [0];
ArrayList l = new ArrayList ();
throw not_supported ();
}
- protected override bool HasElementTypeImpl () {
+ protected override bool HasElementTypeImpl ()
+ {
+#if NET_2_0
+ // a TypeBuilder can never represent an array, pointer
+ if (!is_created)
+ return false;
+#else
check_created ();
+#endif
return created.HasElementType;
}
} else if (attrname == "System.Runtime.InteropServices.ComImportAttribute") {
attrs |= TypeAttributes.Import;
return;
+ } else if (attrname == "System.Security.SuppressUnmanagedCodeSecurityAttribute") {
+ attrs |= TypeAttributes.HasSecurity;
}
if (cattrs != null) {
static int UnmanagedDataCount = 0;
- public FieldBuilder DefineUninitializedData( string name, int size, FieldAttributes attributes) {
+ public FieldBuilder DefineUninitializedData( string name, int size, FieldAttributes attributes)
+ {
check_name ("name", name);
if ((size <= 0) || (size > 0x3f0000))
throw new ArgumentException ("size", "Data size must be > 0 and < 0x3f0000");
check_not_created ();
- string s = "$ArrayType$"+UnmanagedDataCount.ToString();
- UnmanagedDataCount++;
- TypeBuilder datablobtype = DefineNestedType (s,
- TypeAttributes.NestedPrivate|TypeAttributes.ExplicitLayout|TypeAttributes.Sealed,
- pmodule.assemblyb.corlib_value_type, null, PackingSize.Size1, size);
- datablobtype.CreateType ();
+ string typeName = "$ArrayType$" + size;
+ Type datablobtype = pmodule.GetRegisteredType (fullname + "+" + typeName);
+ if (datablobtype == null) {
+ TypeBuilder tb = DefineNestedType (typeName,
+ TypeAttributes.NestedPrivate|TypeAttributes.ExplicitLayout|TypeAttributes.Sealed,
+ pmodule.assemblyb.corlib_value_type, null, PackingSize.Size1, size);
+ tb.CreateType ();
+ datablobtype = tb;
+ }
return DefineField (name, datablobtype, attributes|FieldAttributes.Static|FieldAttributes.HasFieldRVA);
}
if (parentType == null && (attrs & TypeAttributes.Interface) == 0)
throw new ArgumentNullException ("parentType");
-
+
parent = parentType;
// will just set the parent-related bits if called a second time
setup_internal_class (this);