[corlib]Implement .net 4.0 ParameterInfo.
[mono.git] / mcs / class / corlib / System.Reflection.Emit / ModuleBuilder.cs
index 8033613647b05c858e120c66f8bd54dd4bde8741..eab1cd0b8c9432cd6b7aa3d0191b03c36760429c 100644 (file)
@@ -31,6 +31,7 @@
 // (C) 2001 Ximian, Inc.  http://www.ximian.com
 //
 
+#if !FULL_AOT_RUNTIME
 using System;
 using System.Reflection;
 using System.Collections;
@@ -46,6 +47,7 @@ namespace System.Reflection.Emit {
        [ComVisible (true)]
        [ComDefaultInterface (typeof (_ModuleBuilder))]
        [ClassInterface (ClassInterfaceType.None)]
+       [StructLayout (LayoutKind.Sequential)]
        public class ModuleBuilder : Module, _ModuleBuilder {
 
 #pragma warning disable 169, 414
@@ -103,19 +105,12 @@ namespace System.Reflection.Emit {
                        }
 
                        if (emitSymbolInfo) {
-#if MOONLIGHT
-                               symbolWriter = new Mono.CompilerServices.SymbolWriter.SymbolWriterImpl (this);
-#else
                                Assembly asm = Assembly.LoadWithPartialName ("Mono.CompilerServices.SymbolWriter");
                                if (asm == null)
-                                       throw new ExecutionEngineException ("The assembly for default symbol writer cannot be loaded");
-
-                               Type t = asm.GetType ("Mono.CompilerServices.SymbolWriter.SymbolWriterImpl");
-                               if (t == null)
-                                       throw new ExecutionEngineException ("The type that implements the default symbol writer interface cannot be found");
+                                       throw new TypeLoadException ("The assembly for default symbol writer cannot be loaded");
 
+                               Type t = asm.GetType ("Mono.CompilerServices.SymbolWriter.SymbolWriterImpl", true);
                                symbolWriter = (ISymbolWriter) Activator.CreateInstance (t, new object[] { this });
-#endif
                                string fileName = fqname;
                                if (assemblyb.AssemblyDir != null)
                                        fileName = Path.Combine (assemblyb.AssemblyDir, fileName);
@@ -604,6 +599,8 @@ namespace System.Reflection.Emit {
                {
                        if (con == null)
                                throw new ArgumentNullException ("con");
+                       if (con.DeclaringType.Module != this)
+                               throw new InvalidOperationException ("The constructor is not in this module");
                        return new MethodToken (GetToken (con));
                }
 
@@ -656,10 +653,10 @@ namespace System.Reflection.Emit {
                private static extern int getUSIndex (ModuleBuilder mb, string str);
 
                [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               private static extern int getToken (ModuleBuilder mb, object obj);
+               private static extern int getToken (ModuleBuilder mb, object obj, bool create_open_instance);
 
                [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               private static extern int getMethodToken (ModuleBuilder mb, MethodInfo method,
+               private static extern int getMethodToken (ModuleBuilder mb, MethodBase method,
                                                          Type[] opt_param_types);
 
                internal int GetToken (string str)
@@ -674,15 +671,19 @@ namespace System.Reflection.Emit {
                }
 
                internal int GetToken (MemberInfo member) {
-                       return getToken (this, member);
+                       return getToken (this, member, true);
+               }
+
+               internal int GetToken (MemberInfo member, bool create_open_instance) {
+                       return getToken (this, member, create_open_instance);
                }
 
-               internal int GetToken (MethodInfo method, Type[] opt_param_types) {
+               internal int GetToken (MethodBase method, Type[] opt_param_types) {
                        return getMethodToken (this, method, opt_param_types);
                }
 
                internal int GetToken (SignatureHelper helper) {
-                       return getToken (this, helper);
+                       return getToken (this, helper, true);
                }
 
                /*
@@ -916,6 +917,51 @@ namespace System.Reflection.Emit {
                                return Type.GetTypeFromHandle (new RuntimeTypeHandle (handle));
                }
 
+               public override bool Equals (object obj)
+               {
+                       return base.Equals (obj);
+               }
+
+               public override int GetHashCode ()
+               {
+                       return base.GetHashCode ();
+               }
+
+               public override bool IsDefined (Type attributeType, bool inherit)
+               {
+                       return base.IsDefined (attributeType, inherit);
+               }
+
+               public override object[] GetCustomAttributes (bool inherit)
+               {
+                       return base.GetCustomAttributes (inherit);
+               }
+
+               public override object[] GetCustomAttributes (Type attributeType, bool inherit)
+               {
+                       return base.GetCustomAttributes (attributeType, inherit);
+               }
+
+               public override FieldInfo GetField (string name, BindingFlags bindingAttr)
+               {
+                       return base.GetField (name, bindingAttr);
+               }
+
+               public override FieldInfo[] GetFields (BindingFlags bindingFlags)
+               {
+                       return base.GetFields (bindingFlags);
+               }
+
+               public override MethodInfo[] GetMethods (BindingFlags bindingFlags)
+               {
+                       return base.GetMethods (bindingFlags);
+               }
+
+               public override int MetadataToken {
+                       get {
+                               return base.MetadataToken;
+                       }
+               }
 #endif
        }
 
@@ -931,11 +977,11 @@ namespace System.Reflection.Emit {
                        return mb.GetToken (str);
                }
 
-               public int GetToken (MemberInfo member) {
-                       return mb.GetToken (member);
+               public int GetToken (MemberInfo member, bool create_open_instance) {
+                       return mb.GetToken (member, create_open_instance);
                }
 
-               public int GetToken (MethodInfo method, Type[] opt_param_types) {
+               public int GetToken (MethodBase method, Type[] opt_param_types) {
                        return mb.GetToken (method, opt_param_types);
                }
 
@@ -945,3 +991,4 @@ namespace System.Reflection.Emit {
        }
 }
 
+#endif