3 // Sean MacIsaac (macisaac@ximian.com)
5 // (C) 2001 Ximian, Inc.
7 using System.Reflection;
8 using System.Runtime.CompilerServices;
9 using System.Globalization;
13 internal struct MonoTypeInfo {
15 public string name_space;
18 public Type[] interfaces;
19 public Assembly assembly;
20 public TypeAttributes attrs;
24 internal class MonoType : Type
27 [MethodImplAttribute(MethodImplOptions.InternalCall)]
28 private static extern void type_from_obj (MonoType type, Object obj);
30 [MethodImplAttribute(MethodImplOptions.InternalCall)]
31 private static extern void get_type_info (RuntimeTypeHandle type, out MonoTypeInfo info);
33 internal MonoType (Object obj) {
34 type_from_obj (this, obj);
37 [MethodImplAttribute(MethodImplOptions.InternalCall)]
38 private static extern TypeAttributes get_attributes (Type type);
40 protected override TypeAttributes GetAttributeFlagsImpl () {
41 return get_attributes (this);
44 protected override ConstructorInfo GetConstructorImpl (BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) {
45 throw new NotImplementedException ();
48 public override ConstructorInfo[] GetConstructors (BindingFlags bindingAttr) {
49 throw new NotImplementedException ();
52 public override EventInfo GetEvent (string name, BindingFlags bindingAttr) {
53 throw new NotImplementedException ();
56 public override EventInfo[] GetEvents (BindingFlags bindingAttr) {
57 throw new NotImplementedException ();
60 public override FieldInfo GetField( string name, BindingFlags bindingAttr) {
65 public override FieldInfo[] GetFields (BindingFlags bindingAttr) {
70 public override Type GetInterface (string name, bool ignoreCase) {
71 throw new NotImplementedException ();
74 public override Type[] GetInterfaces()
77 get_type_info (_impl, out info);
78 return info.interfaces;
81 public override MemberInfo[] GetMembers( BindingFlags bindingAttr) {
83 throw new NotImplementedException ();
86 public override MethodInfo[] GetMethods (BindingFlags bindingAttr) {
87 MemberInfo[] m = FindMembers (MemberTypes.Method, bindingAttr, null, null);
88 MethodInfo[] res = new MethodInfo [m.Length];
90 for (i = 0; i < m.Length; ++i)
91 res [i] = (MethodInfo) m [i];
95 protected override MethodInfo GetMethodImpl( string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) {
100 public override Type GetNestedType( string name, BindingFlags bindingAttr) {
105 public override Type[] GetNestedTypes (BindingFlags bindingAttr) {
110 public override PropertyInfo[] GetProperties( BindingFlags bindingAttr) {
115 protected override PropertyInfo GetPropertyImpl( string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers) {
120 protected override bool HasElementTypeImpl () {
121 return IsArrayImpl() || IsByRefImpl() || IsPointerImpl ();
124 protected override bool IsArrayImpl () {
125 return type_is_subtype_of (this, typeof (System.Array));
127 protected override bool IsByRefImpl () {
131 protected override bool IsCOMObjectImpl () {
134 protected override bool IsPointerImpl () {
138 protected override bool IsPrimitiveImpl () {
142 protected override bool IsValueTypeImpl () {
144 return (Attributes & TypeAttributes.ClassSemanticsMask) == TypeAttributes.ValueType;
147 public override object InvokeMember( string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters) {
152 public override Type GetElementType()
155 get_type_info (_impl, out info);
159 public override Type UnderlyingSystemType {
162 get_type_info (_impl, out info);
167 public override Assembly Assembly {
170 get_type_info (_impl, out info);
171 return info.assembly;
175 public override string AssemblyQualifiedName {
177 return assQualifiedName ();
181 [MethodImplAttribute(MethodImplOptions.InternalCall)]
182 private extern string assQualifiedName();
184 public override Type BaseType {
187 get_type_info (_impl, out info);
192 public override string FullName {
194 string str = assQualifiedName ();
195 return str.Split(',')[0];
199 public override Guid GUID {
200 get {return Guid.Empty;}
203 public override bool IsDefined (Type attributeType, bool inherit)
208 public override object[] GetCustomAttributes (bool inherit)
213 public override object[] GetCustomAttributes (Type attributeType, bool inherit)
218 public override MemberTypes MemberType {
220 return MemberTypes.All;
224 public override string Name {
227 get_type_info (_impl, out info);
232 public override string Namespace {
235 get_type_info (_impl, out info);
236 return info.name_space;
240 public override Module Module {
246 public override Type ReflectedType {
252 public override RuntimeTypeHandle TypeHandle {
258 public override int GetArrayRank () {
260 get_type_info (_impl, out info);