2008-08-26 Miguel de Icaza <miguel@novell.com>
authorMiguel de Icaza <miguel@gnome.org>
Tue, 26 Aug 2008 19:42:24 +0000 (19:42 -0000)
committerMiguel de Icaza <miguel@gnome.org>
Tue, 26 Aug 2008 19:42:24 +0000 (19:42 -0000)
* codegen.cs: Small cleanup, and add a mechanism to initialize the
code generator for in-memory assemblies.

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

mcs/mcs/ChangeLog
mcs/mcs/codegen.cs

index c6a59e5b3da4c30709846e019f999d7336ca615a..e7af4171807d7420b0ba10ef6cb4674ef491867f 100644 (file)
@@ -1,3 +1,8 @@
+2008-08-26  Miguel de Icaza  <miguel@novell.com>
+
+       * codegen.cs: Small cleanup, and add a mechanism to initialize the
+       code generator for in-memory assemblies.
+
 2008-08-26  Marek Safar  <marek.safar@gmail.com>
 
        * generic.cs, ecore.cs, delegate.cs, cs-parser.jay, expression.cs: A type
index 0a408a2f5c40979fcb128aacee3202ddb17b3b21..cf6fcba165348075070517ef9fb74bf67994269e 100644 (file)
@@ -95,6 +95,25 @@ namespace Mono.CSharp {
                        }
                }
 
+#if MS_COMPATIBLE
+               const AssemblyBuilderAccess COMPILER_ACCESS = 0;
+#else
+               /* Keep this in sync with System.Reflection.Emit.AssemblyBuilder */
+               const AssemblyBuilderAccess COMPILER_ACCESS = (AssemblyBuilderAccess) 0x800;
+#endif
+                               
+               //
+               // Initializes the code generator variables for interactive use (repl)
+               //
+               static public void InitDynamic (string name)
+               {
+                       current_domain = AppDomain.CurrentDomain;
+                       AssemblyName an = Assembly.GetAssemblyName (name, name);
+                       
+                       Assembly.Builder = current_domain.DefineDynamicAssembly (an, AssemblyBuilderAccess.Run | COMPILER_ACCESS);
+                       Module.Builder = Assembly.Builder.DefineDynamicModule (Basename (name), false);
+               }
+               
                //
                // Initializes the code generator variables
                //
@@ -124,15 +143,8 @@ namespace Mono.CSharp {
                        current_domain = AppDomain.CurrentDomain;
 
                        try {
-#if MS_COMPATIBLE
-                               const AssemblyBuilderAccess COMPILER_ACCESS = 0;
-#else
-                               /* Keep this in sync with System.Reflection.Emit.AssemblyBuilder */
-                               const AssemblyBuilderAccess COMPILER_ACCESS = (AssemblyBuilderAccess) 0x800;
-#endif
-                               
                                Assembly.Builder = current_domain.DefineDynamicAssembly (an,
-                                       AssemblyBuilderAccess.Save | COMPILER_ACCESS, Dirname (name));
+                                       AssemblyBuilderAccess.RunAndSave | COMPILER_ACCESS, Dirname (name));
                        }
                        catch (ArgumentException) {
                                // specified key may not be exportable outside it's container