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 // this should not be used - lupus
36 type_from_obj (this, obj);
37 throw new NotImplementedException ();
40 [MethodImplAttribute(MethodImplOptions.InternalCall)]
41 private static extern TypeAttributes get_attributes (Type type);
43 protected override TypeAttributes GetAttributeFlagsImpl () {
44 return get_attributes (this);
47 protected override ConstructorInfo GetConstructorImpl (BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) {
48 throw new NotImplementedException ();
51 public override ConstructorInfo[] GetConstructors (BindingFlags bindingAttr) {
52 throw new NotImplementedException ();
55 public override EventInfo GetEvent (string name, BindingFlags bindingAttr) {
56 throw new NotImplementedException ();
59 public override EventInfo[] GetEvents (BindingFlags bindingAttr) {
60 throw new NotImplementedException ();
63 public override FieldInfo GetField( string name, BindingFlags bindingAttr) {
68 public override FieldInfo[] GetFields (BindingFlags bindingAttr) {
73 public override Type GetInterface (string name, bool ignoreCase) {
74 throw new NotImplementedException ();
77 public override Type[] GetInterfaces()
80 get_type_info (_impl, out info);
81 return info.interfaces;
84 public override MemberInfo[] GetMembers( BindingFlags bindingAttr) {
86 throw new NotImplementedException ();
89 public override MethodInfo[] GetMethods (BindingFlags bindingAttr) {
90 MemberInfo[] m = FindMembers (MemberTypes.Method, bindingAttr, null, null);
91 MethodInfo[] res = new MethodInfo [m.Length];
93 for (i = 0; i < m.Length; ++i)
94 res [i] = (MethodInfo) m [i];
98 protected override MethodInfo GetMethodImpl( string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) {
103 public override Type GetNestedType( string name, BindingFlags bindingAttr) {
108 public override Type[] GetNestedTypes (BindingFlags bindingAttr) {
113 public override PropertyInfo[] GetProperties( BindingFlags bindingAttr) {
118 protected override PropertyInfo GetPropertyImpl( string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers) {
123 protected override bool HasElementTypeImpl () {
124 return IsArrayImpl() || IsByRefImpl() || IsPointerImpl ();
127 protected override bool IsArrayImpl () {
128 return type_is_subtype_of (this, typeof (System.Array), false);
130 protected override bool IsByRefImpl () {
134 protected override bool IsCOMObjectImpl () {
137 protected override bool IsPointerImpl () {
141 protected override bool IsPrimitiveImpl () {
145 protected override bool IsValueTypeImpl () {
146 return type_is_subtype_of (this, typeof (System.ValueType), false) &&
147 this != typeof (System.ValueType) &&
148 this != typeof (System.Enum);
151 public override object InvokeMember( string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters) {
156 public override Type GetElementType()
159 get_type_info (_impl, out info);
163 public override Type UnderlyingSystemType {
166 get_type_info (_impl, out info);
171 public override Assembly Assembly {
174 get_type_info (_impl, out info);
175 return info.assembly;
179 public override string AssemblyQualifiedName {
181 return assQualifiedName ();
185 [MethodImplAttribute(MethodImplOptions.InternalCall)]
186 private extern string assQualifiedName();
188 public override Type BaseType {
191 get_type_info (_impl, out info);
196 public override string FullName {
198 string str = assQualifiedName ();
199 return str.Split(',')[0];
203 public override Guid GUID {
204 get {return Guid.Empty;}
207 public override bool IsDefined (Type attributeType, bool inherit)
209 return MonoCustomAttrs.IsDefined (this, attributeType, inherit);
212 public override object[] GetCustomAttributes (bool inherit)
214 return MonoCustomAttrs.GetCustomAttributes (this, inherit);
217 public override object[] GetCustomAttributes (Type attributeType, bool inherit)
219 return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit);
222 public override MemberTypes MemberType {
224 return MemberTypes.All;
228 public override string Name {
231 get_type_info (_impl, out info);
236 public override string Namespace {
239 get_type_info (_impl, out info);
240 return info.name_space;
244 public override Module Module {
250 public override Type ReflectedType {
256 public override RuntimeTypeHandle TypeHandle {
262 public override int GetArrayRank () {
264 get_type_info (_impl, out info);