// 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
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 ()
{
win32ResourceFile = win32IconFile = null;
defines = null;
output_file = null;
- encoding = null;
- using_default_encoder = true;
+ encoding = defaultEncoding = null;
first_source = null;
}
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;
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 {
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" +
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" +
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) {
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;
Usage ();
Environment.Exit (1);
}
- SetOutputFile (args [++i]);
+ OutputFile = args [++i];
return true;
case "--checked":
Usage ();
Environment.Exit (1);
}
- SetOutputFile (value);
+ OutputFile = value;
return true;
case "/optimize":
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);
}
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;
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;
}
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 ();
RootContext.BootCorlib_PopulateCoreTypes ();
RootContext.PopulateTypes ();
+
+ TypeManager.InitCodeHelpers ();
+
RootContext.DefineTypes ();
if (RootContext.Documentation != null &&
output_file))
return false;
- TypeManager.InitCodeHelpers ();
-
//
// Verify using aliases now
//
if (CodeGen.Assembly.IsClsCompliant) {
AttributeTester.VerifyModulesClsCompliance ();
TypeManager.LoadAllImportedTypes ();
- AttributeTester.VerifyTopLevelNameClsCompliance ();
}
}
if (Report.Errors > 0)
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");
}
//