Merge pull request #926 from ermshiperete/novell-bug-674098
[mono.git] / mcs / mcs / settings.cs
index fa15cad9be6fad207d5bc87ea52262bbc92dc2fe..5e56f614f232f985a567d6ec9d7d3f2029cee2a1 100644 (file)
@@ -30,7 +30,7 @@ namespace Mono.CSharp {
                V_5 = 5,
                Future = 100,
 
-               Default = LanguageVersion.V_5,
+               Default = LanguageVersion.Future,
        }
 
        public enum RuntimeVersion
@@ -146,6 +146,7 @@ namespace Mono.CSharp {
                public int VerboseParserFlag;
                public int FatalCounter;
                public bool Stacktrace;
+               public bool BreakOnInternalError;
                #endregion
 
                public bool ShowFullPaths;
@@ -159,6 +160,8 @@ namespace Mono.CSharp {
 
                public RuntimeVersion StdLibRuntimeVersion;
 
+               public string RuntimeMetadataVersion;
+
                public bool WriteMetadataOnly;
 
                readonly List<string> conditional_symbols;
@@ -301,8 +304,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;
@@ -469,7 +472,7 @@ namespace Mono.CSharp {
                                return;
                        }
 
-                       string[] files = null;
+                       string[] files;
                        try {
                                files = Directory.GetFiles (path, pattern);
                        } catch (System.IO.DirectoryNotFoundException) {
@@ -576,7 +579,7 @@ namespace Mono.CSharp {
                public bool ProcessWarningsList (string text, Action<int> action)
                {
                        bool valid = true;
-                       foreach (string wid in text.Split (numeric_value_separator)) {
+                       foreach (string wid in text.Split (numeric_value_separator, StringSplitOptions.RemoveEmptyEntries)) {
                                int id;
                                if (!int.TryParse (wid, NumberStyles.AllowLeadingWhite, CultureInfo.InvariantCulture, out id)) {
                                        report.Error (1904, "`{0}' is not a valid warning number", wid);
@@ -669,7 +672,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");
                }
 
                //
@@ -975,7 +979,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;
@@ -984,7 +988,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;
@@ -1005,7 +1009,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;
@@ -1180,6 +1184,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;
                        }
@@ -1421,6 +1434,10 @@ 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)){
                                        int fatal = 1;