X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Fdriver.cs;h=a8130b6139c977a75001b09a36644b4e5c776f49;hb=29f95a7d2392761ca8aa5a0d45f598241b40f947;hp=d0f6b66d87b422882446fc8a4c1bab7dde5d4b31;hpb=16a26550560dff03f808ddb8f075e0db8f83ab51;p=mono.git diff --git a/mcs/mcs/driver.cs b/mcs/mcs/driver.cs index d0f6b66d87b..a8130b6139c 100644 --- a/mcs/mcs/driver.cs +++ b/mcs/mcs/driver.cs @@ -6,7 +6,7 @@ // Licensed under the terms of the GNU GPL // // (C) 2001, 2002, 2003 Ximian, Inc (http://www.ximian.com) -// (C) 2004 Novell, Inc +// (C) 2004, 2005 Novell, Inc // namespace Mono.CSharp @@ -91,15 +91,11 @@ namespace Mono.CSharp static DateTime last_time, first_time; // - // Encoding: ISO-Latin1 is 28591 + // Encoding. // + static Encoding defaultEncoding; static Encoding encoding; - // - // Whether the user has specified a different encoder manually - // - static bool using_default_encoder = true; - static public void Reset () { @@ -113,8 +109,7 @@ namespace Mono.CSharp win32ResourceFile = win32IconFile = null; defines = null; output_file = null; - encoding = null; - using_default_encoder = true; + encoding = defaultEncoding = null; first_source = null; } @@ -153,12 +148,12 @@ namespace Mono.CSharp try { input = File.OpenRead (file.Name); } catch { - Report.Error (2001, "Source file '" + file.Name + "' could not be opened"); + Report.Error (2001, "Source file `" + file.Name + "' could not be found"); return; } using (input){ - SeekableStreamReader reader = new SeekableStreamReader (input, encoding, using_default_encoder); + SeekableStreamReader reader = new SeekableStreamReader (input, encoding); Tokenizer lexer = new Tokenizer (reader, file, defines); int token, tokens = 0, errors = 0; @@ -182,12 +177,20 @@ namespace Mono.CSharp try { input = File.OpenRead (file.Name); } catch { - Report.Error (2001, "Source file '" + file.Name + "' could not be opened"); + Report.Error (2001, "Source file `" + file.Name + "' could not be found"); return; } - SeekableStreamReader reader = new SeekableStreamReader (input, encoding, using_default_encoder); - + SeekableStreamReader reader = new SeekableStreamReader (input, encoding); + + // Check 'MZ' header + if (reader.Read () == 77 && reader.Read () == 90) { + Report.Error (2015, "Source file `{0}' is a binary file and not a text file", file.Name); + input.Close (); + return; + } + + reader.Position = 0; parser = new CSharpParser (reader, file, defines); parser.ErrorOutput = Report.Stderr; try { @@ -216,7 +219,7 @@ namespace Mono.CSharp static void Usage () { Console.WriteLine ( - "Mono C# compiler, (C) 2001 - 2003 Ximian, Inc.\n" + + "Mono C# compiler, (C) 2001 - 2005 Novell, Inc.\n" + "mcs [options] source-files\n" + " --about About the Mono C# compiler\n" + " -addmodule:MODULE Adds the module to the generated assembly\n" + @@ -258,13 +261,13 @@ namespace Mono.CSharp static void TargetUsage () { - Report.Error (2019, "Valid options for -target: are exe, winexe, library or module"); + Report.Error (2019, "Invalid target type for -target. Valid options are `exe', `winexe', `library' or `module'"); } static void About () { Console.WriteLine ( - "The Mono C# compiler is (C) 2001, 2002, 2003 Ximian, Inc.\n\n" + + "The Mono C# compiler is (C) 2001-2005, Novell, Inc.\n\n" + "The compiler source code is released under the terms of the GNU GPL\n\n" + "For more information on Mono, visit the project Web site\n" + @@ -276,8 +279,10 @@ namespace Mono.CSharp public static int counter1, counter2; - public static int Main (string[] args) + public static int Main (string[] args) { + Location.InEmacs = Environment.GetEnvironmentVariable ("EMACS") == "t"; + bool ok = MainDriver (args); if (ok && Report.Errors == 0) { @@ -601,25 +606,26 @@ namespace Mono.CSharp soft_references.Insert (p++, def); } - static void SetOutputFile (string name) + public static string OutputFile { - output_file = name; + set { + output_file = value; + } + get { + return Path.GetFileName (output_file); + } } static void SetWarningLevel (string s) { - int level = 0; + int level = -1; try { level = Int32.Parse (s); } catch { - Report.Error ( - 1900, - "--wlevel requires a value from 0 to 4"); - return; } if (level < 0 || level > 4){ - Report.Error (1900, "Warning level must be 0 to 4"); + Report.Error (1900, "Warning level must be in the range 0-4"); return; } RootContext.WarningLevel = level; @@ -715,7 +721,7 @@ namespace Mono.CSharp Usage (); Environment.Exit (1); } - SetOutputFile (args [++i]); + OutputFile = args [++i]; return true; case "--checked": @@ -953,7 +959,7 @@ namespace Mono.CSharp Usage (); Environment.Exit (1); } - SetOutputFile (value); + OutputFile = value; return true; case "/optimize": @@ -1059,10 +1065,10 @@ namespace Mono.CSharp embedded_resources = new ArrayList (); if (embedded_resources.Contains (value)) { - Report.Error (1508, String.Format ("The resource identifier '{0}' has already been used in this assembly.", value)); + Report.Error (1508, String.Format ("The resource identifier `{0}' has already been used in this assembly.", value)); } else if (value.IndexOf (',') != -1 && embedded_resources.Contains (value.Split (',')[1])) { - Report.Error (1508, String.Format ("The resource identifier '{0}' has already been used in this assembly.", value)); + Report.Error (1508, String.Format ("The resource identifier `{0}' has already been used in this assembly.", value)); } else { embedded_resources.Add (value); @@ -1207,7 +1213,7 @@ namespace Mono.CSharp } Report.SetIgnoreWarning (warn); } catch { - Report.Error (1904, String.Format("'{0}' is not a valid warning number", wc)); + Report.Error (1904, String.Format("`{0}' is not a valid warning number", wc)); } } return true; @@ -1291,36 +1297,30 @@ namespace Mono.CSharp SetupV2 (); return true; } - Report.Error (1617, "Invalid option '{0}' for /langversion; must be ISO-1 or Default", value); + Report.Error (1617, "Invalid option `{0}' for /langversion. It must be either `ISO-1' or `Default'", value); return true; case "/codepage": - int cp = -1; - - if (value == "utf8"){ + switch (value) { + case "utf8": encoding = new UTF8Encoding(); - using_default_encoder = false; - return true; - } - if (value == "reset"){ - // - // 28591 is the code page for ISO-8859-1 encoding. - // - cp = 28591; - using_default_encoder = true; - } - - try { - cp = Int32.Parse (value); - encoding = Encoding.GetEncoding (cp); - using_default_encoder = false; - } catch { - Report.Error (2016, String.Format("Code page '{0}' is invalid or not installed", cp)); + break; + case "reset": + encoding = defaultEncoding; + break; + default: + try { + encoding = Encoding.GetEncoding ( + Int32.Parse (value)); + } catch { + Report.Error (2016, "Code page `{0}' is invalid or not installed", value); + } + break; } return true; } - //Report.Error (2007, String.Format ("Unrecognized command-line option: '{0}'", option)); + //Report.Error (2007, String.Format ("Unrecognized command-line option: `{0}'", option)); //Environment.Exit (1); return false; } @@ -1365,12 +1365,14 @@ namespace Mono.CSharp bool parsing_options = true; try { - encoding = Encoding.GetEncoding (28591); - } catch { - Console.WriteLine ("Error: could not load encoding 28591, trying 1252"); - encoding = Encoding.GetEncoding (1252); + // Latin1 + defaultEncoding = Encoding.GetEncoding (28591); + } catch (Exception) { + // iso-8859-1 + defaultEncoding = Encoding.GetEncoding (1252); } - + encoding = defaultEncoding; + references = new ArrayList (); soft_references = new ArrayList (); modules = new ArrayList (); @@ -1609,7 +1611,6 @@ namespace Mono.CSharp if (CodeGen.Assembly.IsClsCompliant) { AttributeTester.VerifyModulesClsCompliance (); TypeManager.LoadAllImportedTypes (); - AttributeTester.VerifyTopLevelNameClsCompliance (); } } if (Report.Errors > 0) @@ -1653,28 +1654,28 @@ namespace Mono.CSharp if (RootContext.MainClass != null) { DeclSpace main_cont = RootContext.Tree.GetDecl (MemberName.FromDotted (RootContext.MainClass)); if (main_cont == null) { - Report.Error (1555, output_file, "Could not find '{0}' specified for Main method", RootContext.MainClass); + Report.Error (1555, "Could not find `{0}' specified for Main method", RootContext.MainClass); return false; } if (!(main_cont is ClassOrStruct)) { - Report.Error (1556, output_file, "'{0}' specified for Main method must be a valid class or struct", RootContext.MainClass); + Report.Error (1556, "`{0}' specified for Main method must be a valid class or struct", RootContext.MainClass); return false; } - Report.Error (1558, main_cont.Location, "'{0}' does not have a suitable static Main method", main_cont.GetSignatureForError ()); + Report.Error (1558, main_cont.Location, "`{0}' does not have a suitable static Main method", main_cont.GetSignatureForError ()); return false; } if (Report.Errors == 0) - Report.Error (5001, "Program " + output_file + - " does not have an entry point defined"); + Report.Error (5001, "Program `{0}' does not contain a static `Main' method suitable for an entry point", + output_file); return false; } CodeGen.Assembly.Builder.SetEntryPoint (ep, k); } else if (RootContext.MainClass != null) { - Report.Error (2017, "Can not specify -main: when building module or library"); + Report.Error (2017, "Cannot specify -main if building a module or library"); } //