2004-02-06 Sebastien Pouliot <sebastien@ximian.com>
[mono.git] / mcs / ilasm / Driver.cs
index fdf6c535b812bedd9e1fb167cded2a70d884a7c9..6121796e2ff143b310cb91f6b08d0990c1d9d1f4 100644 (file)
@@ -39,20 +39,23 @@ namespace Mono.ILASM {
                 private class DriverMain {
 
                         private ArrayList il_file_list;
+                        private Report report;
                         private string output_file;
                         private Target target = Target.Exe;
+                        private string target_string = "exe";
+                        private bool quiet = false;
                         private bool show_tokens = false;
                         private bool show_method_def = false;
                         private bool show_method_ref = false;
                         private bool show_parser = false;
                         private bool scan_only = false;
-                        private bool delete_on_error = false;
                         private CodeGen codegen;
 
                         public DriverMain (string[] args)
                         {
                                 il_file_list = new ArrayList ();
                                 ParseArgs (args);
+                                report = new Report (quiet);
                         }
 
                         public void Run ()
@@ -62,7 +65,7 @@ namespace Mono.ILASM {
                                                 Usage ();
                                         if (output_file == null)
                                                 output_file = CreateOutputFile ();
-                                        codegen = new CodeGen (output_file, target == Target.Dll, true);
+                                        codegen = new CodeGen (output_file, target == Target.Dll, true, report);
                                         foreach (string file_path in il_file_list)
                                                 ProcessFile (file_path);
                                         if (scan_only)
@@ -70,10 +73,6 @@ namespace Mono.ILASM {
 
                                         codegen.Write ();
                                 } catch {
-                                        if (delete_on_error) {
-                                                if (File.Exists (output_file))
-                                                        File.Delete (output_file);
-                                        }
                                         throw;
                                 }
                         }
@@ -85,6 +84,8 @@ namespace Mono.ILASM {
                                                 file_path);
                                         Environment.Exit (2);
                                 }
+                                report.AssembleFile (file_path, null,
+                                                target_string, output_file);
                                 StreamReader reader = File.OpenText (file_path);
                                 ILTokenizer scanner = new ILTokenizer (reader);
 
@@ -103,17 +104,17 @@ namespace Mono.ILASM {
                                         return;
                                 }
 
-                                ILParser parser = new ILParser (codegen);
-                               try {
-                                       if (show_parser)
-                                               parser.yyparse (new ScannerAdapter (scanner),  
-                                                               new yydebug.yyDebugSimple ());
-                                       else
-                                               parser.yyparse (new ScannerAdapter (scanner),  null);
-                               } catch {
-                                       Console.WriteLine ("Error at: " + scanner.Reader.Location);
-                                       throw;
-                               }
+                                ILParser parser = new ILParser (codegen, reader);
+                                try {
+                                        if (show_parser)
+                                                parser.yyparse (new ScannerAdapter (scanner),
+                                                                new yydebug.yyDebugSimple ());
+                                        else
+                                                parser.yyparse (new ScannerAdapter (scanner),  null);
+                                } catch {
+                                        Console.WriteLine ("Error at: " + scanner.Reader.Location);
+                                        throw;
+                                }
                         }
 
                         public void ShowToken (object sender, NewTokenEventArgs args)
@@ -156,9 +157,27 @@ namespace Mono.ILASM {
                                                 break;
                                         case "exe":
                                                 target = Target.Exe;
+                                                target_string = "exe";
                                                 break;
                                         case "dll":
                                                 target = Target.Dll;
+                                                target_string = "dll";
+                                                break;
+                                        case "quiet":
+                                                quiet = true;
+                                                break;
+                                        // Stubs to stay commandline compatible with MS 
+                                        case "listing":
+                                        case "nologo":
+                                        case "debug":
+                                        case "clock":
+                                        case "error":
+                                        case "subsystem":
+                                        case "flags":
+                                        case "alignment":
+                                        case "base":
+                                        case "key":
+                                        case "resource":
                                                 break;
                                         case "scan_only":
                                                 scan_only = true;
@@ -175,10 +194,6 @@ namespace Mono.ILASM {
                                         case "show_parser":
                                                 show_parser = true;
                                                 break;
-                                        case "delete_on_error":
-                                        case "doe":
-                                                delete_on_error = true;
-                                                break;
                                         case "-about":
                                                 if (str[0] != '-')
                                                         break;
@@ -189,6 +204,11 @@ namespace Mono.ILASM {
                                                         break;
                                                 Version ();
                                                 break;
+                                        default:
+                                                if (str [0] == '-')
+                                                        break;
+                                                il_file_list.Add (str);
+                                                break;
                                         }
                                 }
                         }
@@ -220,7 +240,7 @@ namespace Mono.ILASM {
                                         ext_index = file_name.Length;
 
                                 return String.Format ("{0}.{1}", file_name.Substring (0, ext_index),
-                                        target.ToString ().ToLower ());
+                                        target_string);
                         }
 
                         private void Usage ()