2004-12-15 Cesar Lopez Nataren <cesar@ciencias.unam.mx>
authorCésar Natarén <cesar@mono-cvs.ximian.com>
Wed, 15 Dec 2004 19:22:52 +0000 (19:22 -0000)
committerCésar Natarén <cesar@mono-cvs.ximian.com>
Wed, 15 Dec 2004 19:22:52 +0000 (19:22 -0000)
* CodeGenerator.cs: add support for compiling not only from cwd.

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

mcs/class/Microsoft.JScript/Microsoft.JScript/ChangeLog
mcs/class/Microsoft.JScript/Microsoft.JScript/CodeGenerator.cs

index 93ade1534e9071bbe976ef92c8467ac09020f545..379ac622fb3eab4c658adb5bee0dd9de03ad9086 100644 (file)
@@ -1,3 +1,7 @@
+2004-12-15  Cesar Lopez Nataren  <cesar@ciencias.unam.mx>
+
+       * CodeGenerator.cs: add support for compiling not only from cwd.
+
 2004-12-13  Cesar Lopez Nataren  <cesar@ciencias.unam.mx>
 
        * expression.cs: emit code for null literal.
index ae8f00182c260cd2cd36a8e5f19c1cca9a64bf72..096f44a1b11268c9b9e643a5e1161b46e199394f 100644 (file)
@@ -29,6 +29,7 @@
 //
 
 using System;
+using System.IO;
 using System.Reflection;
 using System.Reflection.Emit;
 using System.Threading;
@@ -77,18 +78,46 @@ namespace Microsoft.JScript {
                internal static AssemblyBuilder assembly_builder;
                internal static ModuleBuilder module_builder;
 
+               internal static string Basename (string name)
+               {
+                       int pos = name.LastIndexOf ('/');
+
+                       if (pos != -1)
+                               return name.Substring (pos + 1);
+
+                       pos = name.LastIndexOf ('\\');
+                       if (pos != -1)
+                               return name.Substring (pos + 1);
+
+                       return name;
+               }
+
+               internal static string Dirname (string name)
+               {
+                       int pos = name.LastIndexOf ('/');
+
+                        if (pos != -1)
+                                return name.Substring (0, pos);
+
+                        pos = name.LastIndexOf ('\\');
+                        if (pos != -1)
+                                return name.Substring (0, pos);
+
+                        return ".";
+               }
+
                internal static void Init (string file_name)
                {
                        app_domain = Thread.GetDomain ();
 
                        assembly_name = new AssemblyName ();
-                       assembly_name.Name =  trim_extension (file_name);
-
+                       assembly_name.Name = Path.GetFileNameWithoutExtension (file_name);
                        mod_name = MODULE;
 
                        assembly_builder = app_domain.DefineDynamicAssembly (
                                             assembly_name,
-                                            AssemblyBuilderAccess.RunAndSave);
+                                            AssemblyBuilderAccess.RunAndSave,
+                                            Dirname (file_name));
 
                        ConstructorInfo ctr_info = typeof (Microsoft.JScript.ReferenceAttribute).GetConstructor (new Type [] { typeof (string) });
                        // FIXME: find out which is the blob.
@@ -96,9 +125,9 @@ namespace Microsoft.JScript {
                        assembly_builder.SetCustomAttribute (ctr_info, blob); 
 
                        module_builder = assembly_builder.DefineDynamicModule (
-                                               mod_name,
-                                               assembly_name.Name + ".exe", 
-                                               false);
+                                              mod_name,
+                                              Basename (assembly_name.Name + ".exe"),
+                                              false);
                }
 
                internal static string trim_extension (string file_name)
@@ -113,7 +142,7 @@ namespace Microsoft.JScript {
 
                internal static void Save (string target_name)
                {
-                       assembly_builder.Save (target_name);
+                       assembly_builder.Save (CodeGenerator.Basename (target_name));
                }
 
                internal static void Emit (AST prog)