2003-12-19 Zoltan Varga <vargaz@freemail.hu>
authorZoltan Varga <vargaz@gmail.com>
Fri, 19 Dec 2003 16:40:10 +0000 (16:40 -0000)
committerZoltan Varga <vargaz@gmail.com>
Fri, 19 Dec 2003 16:40:10 +0000 (16:40 -0000)
* AssemblyBuilder.cs: New internal property to support /target:module in
mcs.

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

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

index f38b169ef1c96d7fc2326e1e4490af751b17aacc..4e259460d03294ab5f43c3fb468aa934262e37a5 100755 (executable)
@@ -67,6 +67,7 @@ namespace System.Reflection.Emit {
                internal Type corlib_void_type = typeof (void);
                ArrayList resource_writers = null;
                bool created;
+               bool is_module_only;
 
                [MethodImplAttribute(MethodImplOptions.InternalCall)]
                private static extern void basic_init (AssemblyBuilder ab);
@@ -230,6 +231,9 @@ namespace System.Reflection.Emit {
 
                        ModuleBuilder r = new ModuleBuilder (this, name, fileName, emitSymbolInfo, transient);
 
+                       if ((modules != null) && is_module_only)
+                               throw new InvalidOperationException ("A module-only assembly can only contain one module.");
+
                        if (modules != null) {
                                ModuleBuilder[] new_modules = new ModuleBuilder [modules.Length + 1];
                                System.Array.Copy(modules, new_modules, modules.Length);
@@ -351,6 +355,20 @@ namespace System.Reflection.Emit {
                        }
                }
 
+               /*
+                * Mono extension. If this is set, the assembly can only contain one
+                * module, access should be Save, and the saved image will not contain an
+                * assembly manifest.
+                */
+               internal bool IsModuleOnly {
+                       get {
+                               return is_module_only;
+                       }
+                       set {
+                               is_module_only = value;
+                       }
+               }
+
                public void Save (string assemblyFileName)
                {
                        if (resource_writers != null) {
@@ -368,7 +386,8 @@ namespace System.Reflection.Emit {
                        if (mainModule == null)
                                mainModule = DefineDynamicModule ("RefEmit_OnDiskManifestModule", assemblyFileName);
 
-                       mainModule.IsMain = true;
+                       if (!is_module_only)
+                               mainModule.IsMain = true;
 
                        foreach (ModuleBuilder module in modules)
                                if (module != mainModule)
index c4777d8a99cf071bf81eef93a0eb989f9c20570f..0bfec0d23cfb5323ffe1257fc499a486be69e0e3 100644 (file)
@@ -1,3 +1,8 @@
+2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
+
+       * AssemblyBuilder.cs: New internal property to support /target:module in
+       mcs.
+
 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
 
        * ILGenerator.cs: Applied patch from Ben Maurer