2003-12-20 Zoltan Varga <vargaz@freemail.hu>
authorZoltan Varga <vargaz@gmail.com>
Sat, 20 Dec 2003 17:49:05 +0000 (17:49 -0000)
committerZoltan Varga <vargaz@gmail.com>
Sat, 20 Dec 2003 17:49:05 +0000 (17:49 -0000)
* AssemblyBuilder.cs (AddModule): New internal method to support
/addmodule in mcs.

svn path=/trunk/mcs/; revision=21385

mcs/class/corlib/System.Reflection.Emit/AssemblyBuilder.cs
mcs/class/corlib/System.Reflection.Emit/ChangeLog

index 4e259460d03294ab5f43c3fb468aa934262e37a5..fb8f261b0d893d73d2708dcc3e4e6c6b13065480 100755 (executable)
@@ -60,6 +60,7 @@ namespace System.Reflection.Emit {
                PEFileKinds pekind = PEFileKinds.Dll;
                bool delay_sign;
                uint access;
+               private Module[] loaded_modules;
                #endregion
                internal Type corlib_object_type = typeof (System.Object);
                internal Type corlib_value_type = typeof (System.ValueType);
@@ -237,15 +238,39 @@ namespace System.Reflection.Emit {
                        if (modules != null) {
                                ModuleBuilder[] new_modules = new ModuleBuilder [modules.Length + 1];
                                System.Array.Copy(modules, new_modules, modules.Length);
-                               new_modules [modules.Length] = r;
                                modules = new_modules;
                        } else {
                                modules = new ModuleBuilder [1];
-                               modules [0] = r;
                        }
+                       modules [modules.Length - 1] = r;
                        return r;
                }
 
+               [MethodImplAttribute(MethodImplOptions.InternalCall)]
+               private extern Module InternalAddModule (string fileName);
+
+               /*
+                * Mono extension to support /addmodule in mcs.
+                */
+               internal Module AddModule (string fileName)
+               {
+                       if (fileName == null)
+                               throw new ArgumentNullException (fileName);
+
+                       Module m = InternalAddModule (fileName);
+
+                       if (loaded_modules != null) {
+                               Module[] new_modules = new Module [loaded_modules.Length + 1];
+                               System.Array.Copy (loaded_modules, new_modules, loaded_modules.Length);
+                               loaded_modules = new_modules;
+                       } else {
+                               loaded_modules = new Module [1];
+                       }
+                       loaded_modules [loaded_modules.Length - 1] = m;
+
+                       return m;
+               }
+
                public IResourceWriter DefineResource (string name, string description, string fileName)
                {
                        return DefineResource (name, description, fileName, ResourceAttributes.Public);
index 0bfec0d23cfb5323ffe1257fc499a486be69e0e3..91bd6b11798bf54c2ac44958c70a52ec038879c2 100644 (file)
@@ -1,3 +1,8 @@
+2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
+
+       * AssemblyBuilder.cs (AddModule): New internal method to support 
+       /addmodule in mcs.
+
 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
 
        * AssemblyBuilder.cs: New internal property to support /target:module in