X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Fsettings.cs;h=01c37873ecd60872cbc71cd8b3e707d17be34189;hb=bc9d5d113ab7064fc199a2f430751643466cb477;hp=af8512ae255ba0b32113699c45637a19c1444be8;hpb=96d531dd95006241c8e752fdbd38aced5a2c0fc4;p=mono.git diff --git a/mcs/mcs/settings.cs b/mcs/mcs/settings.cs index af8512ae255..13abbd67c67 100644 --- a/mcs/mcs/settings.cs +++ b/mcs/mcs/settings.cs @@ -28,9 +28,10 @@ namespace Mono.CSharp { V_3 = 3, V_4 = 4, V_5 = 5, - Future = 100, + V_6 = 6, + Experimental = 100, - Default = LanguageVersion.V_5, + Default = LanguageVersion.V_6, } public enum RuntimeVersion @@ -146,8 +147,11 @@ namespace Mono.CSharp { public int VerboseParserFlag; public int FatalCounter; public bool Stacktrace; + public bool BreakOnInternalError; #endregion + public List GetResourceStrings; + public bool ShowFullPaths; // @@ -159,6 +163,8 @@ namespace Mono.CSharp { public RuntimeVersion StdLibRuntimeVersion; + public string RuntimeMetadataVersion; + public bool WriteMetadataOnly; readonly List conditional_symbols; @@ -301,8 +307,8 @@ namespace Mono.CSharp { UnknownOption } - static readonly char[] argument_value_separator = new char[] { ';', ',' }; - static readonly char[] numeric_value_separator = new char[] { ';', ',', ' ' }; + static readonly char[] argument_value_separator = { ';', ',' }; + static readonly char[] numeric_value_separator = { ';', ',', ' ' }; readonly TextWriter output; readonly Report report; @@ -350,6 +356,17 @@ namespace Mono.CSharp { public CompilerSettings ParseArguments (string[] args) { CompilerSettings settings = new CompilerSettings (); + if (!ParseArguments (settings, args)) + return null; + + return settings; + } + + public bool ParseArguments (CompilerSettings settings, string[] args) + { + if (settings == null) + throw new ArgumentNullException ("settings"); + List response_file_list = null; bool parsing_options = true; stop_argument = false; @@ -369,7 +386,7 @@ namespace Mono.CSharp { if (response_file_list.Contains (response_file)) { report.Error (1515, "Response file `{0}' specified multiple times", response_file); - return null; + return false; } response_file_list.Add (response_file); @@ -377,7 +394,7 @@ namespace Mono.CSharp { extra_args = LoadArgs (response_file); if (extra_args == null) { report.Error (2011, "Unable to open response file: " + response_file); - return null; + return false; } args = AddArgs (args, extra_args); @@ -399,7 +416,7 @@ namespace Mono.CSharp { continue; case ParseResult.Stop: stop_argument = true; - return settings; + return true; case ParseResult.UnknownOption: if (UnknownOptionHandler != null) { var ret = UnknownOptionHandler (args, i); @@ -433,11 +450,11 @@ namespace Mono.CSharp { } Error_WrongOption (arg); - return null; + return false; case ParseResult.Stop: stop_argument = true; - return settings; + return true; } } } @@ -445,10 +462,7 @@ namespace Mono.CSharp { ProcessSourceFiles (arg, false, settings.SourceFiles); } - if (report.Errors > 0) - return null; - - return settings; + return report.Errors == 0; } void ProcessSourceFiles (string spec, bool recurse, List sourceFiles) @@ -461,7 +475,7 @@ namespace Mono.CSharp { return; } - string[] files = null; + string[] files; try { files = Directory.GetFiles (path, pattern); } catch (System.IO.DirectoryNotFoundException) { @@ -568,16 +582,22 @@ namespace Mono.CSharp { public bool ProcessWarningsList (string text, Action action) { bool valid = true; - foreach (string wid in text.Split (numeric_value_separator)) { + foreach (string wid in text.Split (numeric_value_separator, StringSplitOptions.RemoveEmptyEntries)) { + var warning = wid; + if (warning.Length == 6 && warning [0] == 'C' && warning [1] == 'S') + warning = warning.Substring (2); + int id; - if (!int.TryParse (wid, NumberStyles.AllowLeadingWhite, CultureInfo.InvariantCulture, out id)) { - report.Error (1904, "`{0}' is not a valid warning number", wid); - valid = false; + if (!int.TryParse (warning, NumberStyles.AllowLeadingWhite, CultureInfo.InvariantCulture, out id)) { continue; } - if (report.CheckWarningCode (id, Location.Null)) + if (report.CheckWarningCode (id, Location.Null)) { action (id); + } else { + report.Error (1904, "`{0}' is not a valid warning number", wid); + valid = false; + } } return valid; @@ -661,7 +681,8 @@ namespace Mono.CSharp { " --stacktrace Shows stack trace at error location\n" + " --timestamp Displays time stamps of various compiler events\n" + " -v Verbose parsing (for debugging the parser)\n" + - " --mcs-debug X Sets MCS debugging level to X\n"); + " --mcs-debug X Sets MCS debugging level to X\n" + + " --break-on-ice Breaks compilation on internal compiler error"); } // @@ -967,7 +988,7 @@ namespace Mono.CSharp { settings.WarningsAreErrors = true; parser_settings.WarningsAreErrors = true; } else { - if (!ProcessWarningsList (value, v => settings.AddWarningAsError (v))) + if (!ProcessWarningsList (value, settings.AddWarningAsError)) return ParseResult.Error; } return ParseResult.Success; @@ -976,7 +997,7 @@ namespace Mono.CSharp { if (value.Length == 0) { settings.WarningsAreErrors = false; } else { - if (!ProcessWarningsList (value, v => settings.AddWarningOnly (v))) + if (!ProcessWarningsList (value, settings.AddWarningOnly)) return ParseResult.Error; } return ParseResult.Success; @@ -997,7 +1018,7 @@ namespace Mono.CSharp { return ParseResult.Error; } - if (!ProcessWarningsList (value, v => settings.SetIgnoreWarning (v))) + if (!ProcessWarningsList (value, settings.SetIgnoreWarning)) return ParseResult.Error; return ParseResult.Success; @@ -1124,11 +1145,13 @@ namespace Mono.CSharp { switch (value.ToLowerInvariant ()) { case "iso-1": + case "1": settings.Version = LanguageVersion.ISO_1; return ParseResult.Success; case "default": settings.Version = LanguageVersion.Default; return ParseResult.Success; + case "2": case "iso-2": settings.Version = LanguageVersion.ISO_2; return ParseResult.Success; @@ -1141,12 +1164,18 @@ namespace Mono.CSharp { case "5": settings.Version = LanguageVersion.V_5; return ParseResult.Success; - case "future": - settings.Version = LanguageVersion.Future; + case "6": + settings.Version = LanguageVersion.V_6; + return ParseResult.Success; + case "experimental": + settings.Version = LanguageVersion.Experimental; return ParseResult.Success; + case "future": + report.Warning (8000, 1, "Language version `future' is no longer supported"); + goto case "6"; } - report.Error (1617, "Invalid -langversion option `{0}'. It must be `ISO-1', `ISO-2', `3', `4', `5', `Default' or `Future'", value); + report.Error (1617, "Invalid -langversion option `{0}'. It must be `ISO-1', `ISO-2', Default or value in range 1 to 6", value); return ParseResult.Error; case "/codepage": @@ -1172,6 +1201,15 @@ namespace Mono.CSharp { } return ParseResult.Success; + case "runtimemetadataversion": + if (value.Length == 0) { + Error_RequiresArgument (option); + return ParseResult.Error; + } + + settings.RuntimeMetadataVersion = value; + return ParseResult.Success; + default: return ParseResult.UnknownOption; } @@ -1413,8 +1451,12 @@ namespace Mono.CSharp { settings.WriteMetadataOnly = true; return ParseResult.Success; + case "--break-on-ice": + settings.BreakOnInternalError = true; + return ParseResult.Success; + default: - if (arg.StartsWith ("--fatal", StringComparison.Ordinal)){ + if (arg.StartsWith ("--fatal", StringComparison.Ordinal)) { int fatal = 1; if (arg.StartsWith ("--fatal=", StringComparison.Ordinal)) int.TryParse (arg.Substring (8), out fatal); @@ -1442,6 +1484,20 @@ namespace Mono.CSharp { return ParseResult.Success; } + if (arg.StartsWith ("--getresourcestrings:", StringComparison.Ordinal)) { + string file = arg.Substring (21).Trim (); + if (file.Length < 1) { + Error_RequiresArgument (arg); + return ParseResult.Error; + } + + if (settings.GetResourceStrings == null) + settings.GetResourceStrings = new List (); + + settings.GetResourceStrings.Add (file); + return ParseResult.Success; + } + return ParseResult.UnknownOption; } } @@ -1511,7 +1567,7 @@ namespace Mono.CSharp { " -help Lists all compiler options (short: -?)\n" + " -keycontainer:NAME The key pair container used to sign the output assembly\n" + " -keyfile:FILE The key file used to strongname the ouput assembly\n" + - " -langversion:TEXT Specifies language version: ISO-1, ISO-2, 3, 4, 5, Default or Future\n" + + " -langversion:TEXT Specifies language version: ISO-1, ISO-2, 3, 4, 5, Default or Experimental\n" + " -lib:PATH1[,PATHn] Specifies the location of referenced assemblies\n" + " -main:CLASS Specifies the class with the Main method (short: -m)\n" + " -noconfig Disables implicitly referenced assemblies\n" +