3 // Sean MacIsaac (macisaac@ximian.com)
4 // Paolo Molaro (lupus@ximian.com)
6 // (C) 2001 Ximian, Inc.
8 using System.Reflection;
9 using System.Runtime.CompilerServices;
10 using System.Globalization;
14 internal struct MonoTypeInfo {
16 public string name_space;
19 public Type[] interfaces;
20 public Assembly assembly;
21 public TypeAttributes attrs;
25 internal class MonoType : Type
28 [MethodImplAttribute(MethodImplOptions.InternalCall)]
29 private static extern void type_from_obj (MonoType type, Object obj);
31 [MethodImplAttribute(MethodImplOptions.InternalCall)]
32 private static extern void get_type_info (RuntimeTypeHandle type, out MonoTypeInfo info);
34 internal MonoType (Object obj) {
35 type_from_obj (this, obj);
38 [MethodImplAttribute(MethodImplOptions.InternalCall)]
39 private static extern TypeAttributes get_attributes (Type type);
41 protected override TypeAttributes GetAttributeFlagsImpl () {
42 return get_attributes (this);
45 protected override ConstructorInfo GetConstructorImpl (BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) {
46 throw new NotImplementedException ();
49 public override ConstructorInfo[] GetConstructors (BindingFlags bindingAttr) {
50 throw new NotImplementedException ();
53 public override EventInfo GetEvent (string name, BindingFlags bindingAttr) {
54 throw new NotImplementedException ();
57 public override EventInfo[] GetEvents (BindingFlags bindingAttr) {
58 throw new NotImplementedException ();
61 public override FieldInfo GetField( string name, BindingFlags bindingAttr) {
66 public override FieldInfo[] GetFields (BindingFlags bindingAttr) {
71 public override Type GetInterface (string name, bool ignoreCase) {
72 throw new NotImplementedException ();
75 public override Type[] GetInterfaces()
78 get_type_info (_impl, out info);
79 return info.interfaces;
82 public override MemberInfo[] GetMembers( BindingFlags bindingAttr) {
84 throw new NotImplementedException ();
87 public override MethodInfo[] GetMethods (BindingFlags bindingAttr) {
88 MemberInfo[] m = FindMembers (MemberTypes.Method, bindingAttr, null, null);
89 MethodInfo[] res = new MethodInfo [m.Length];
91 for (i = 0; i < m.Length; ++i)
92 res [i] = (MethodInfo) m [i];
96 protected override MethodInfo GetMethodImpl( string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) {
101 public override Type GetNestedType( string name, BindingFlags bindingAttr) {
106 public override Type[] GetNestedTypes (BindingFlags bindingAttr) {
111 public override PropertyInfo[] GetProperties( BindingFlags bindingAttr) {
116 protected override PropertyInfo GetPropertyImpl( string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers) {
121 protected override bool HasElementTypeImpl () {
122 return IsArrayImpl() || IsByRefImpl() || IsPointerImpl ();
125 protected override bool IsArrayImpl () {
126 return type_is_subtype_of (this, typeof (System.Array));
128 protected override bool IsByRefImpl () {
132 protected override bool IsCOMObjectImpl () {
135 protected override bool IsPointerImpl () {
139 protected override bool IsPrimitiveImpl () {
143 protected override bool IsValueTypeImpl () {
144 return type_is_subtype_of (this, typeof (System.ValueType)) &&
145 this != typeof (System.ValueType) &&
146 this != typeof (System.Enum);
149 public override object InvokeMember( string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters) {
154 public override Type GetElementType()
157 get_type_info (_impl, out info);
161 public override Type UnderlyingSystemType {
164 get_type_info (_impl, out info);
169 public override Assembly Assembly {
172 get_type_info (_impl, out info);
173 return info.assembly;
177 public override string AssemblyQualifiedName {
179 return assQualifiedName ();
183 [MethodImplAttribute(MethodImplOptions.InternalCall)]
184 private extern string assQualifiedName();
186 public override Type BaseType {
189 get_type_info (_impl, out info);
194 public override string FullName {
196 string str = assQualifiedName ();
197 return str.Split(',')[0];
201 public override Guid GUID {
202 get {return Guid.Empty;}
205 public override bool IsDefined (Type attributeType, bool inherit)
207 return MonoCustomAttrs.IsDefined (this, attributeType, inherit);
210 public override object[] GetCustomAttributes (bool inherit)
212 return MonoCustomAttrs.GetCustomAttributes (this, inherit);
215 public override object[] GetCustomAttributes (Type attributeType, bool inherit)
217 return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit);
220 public override MemberTypes MemberType {
222 return MemberTypes.All;
226 public override string Name {
229 get_type_info (_impl, out info);
234 public override string Namespace {
237 get_type_info (_impl, out info);
238 return info.name_space;
242 public override Module Module {
248 public override Type ReflectedType {
254 public override RuntimeTypeHandle TypeHandle {
260 public override int GetArrayRank () {
262 get_type_info (_impl, out info);