bool UnixParseOption (string arg, ref string [] args, ref int i)
{
switch (arg){
case "-v":
CSharpParser.yacc_verbose_flag++;
return true;
case "--version":
Version ();
return true;
case "--parse":
RootContext.ParseOnly = true;
return true;
case "--main": case "-m":
Report.Warning (-29, 1, "Compatibility: Use -main:CLASS instead of --main CLASS or -m CLASS");
if ((i + 1) >= args.Length){
Usage ();
Environment.Exit (1);
}
RootContext.MainClass = args [++i];
return true;
case "--unsafe":
Report.Warning (-29, 1, "Compatibility: Use -unsafe instead of --unsafe");
RootContext.Unsafe = true;
return true;
case "/?": case "/h": case "/help":
case "--help":
Usage ();
Environment.Exit (0);
return true;
case "--define":
Report.Warning (-29, 1, "Compatibility: Use -d:SYMBOL instead of --define SYMBOL");
if ((i + 1) >= args.Length){
Usage ();
Environment.Exit (1);
}
RootContext.AddConditional (args [++i]);
return true;
case "--tokenize":
RootContext.TokenizeOnly = true;
return true;
case "-o":
case "--output":
Report.Warning (-29, 1, "Compatibility: Use -out:FILE instead of --output FILE or -o FILE");
if ((i + 1) >= args.Length){
Usage ();
Environment.Exit (1);
}
RootContext.OutputFile = args [++i];
return true;
case "--checked":
Report.Warning (-29, 1, "Compatibility: Use -checked instead of --checked");
RootContext.Checked = true;
return true;
case "--stacktrace":
Report.Printer.Stacktrace = true;
return true;
case "--linkresource":
case "--linkres":
Report.Warning (-29, 1, "Compatibility: Use -linkres:VALUE instead of --linkres VALUE");
if ((i + 1) >= args.Length){
Usage ();
Report.Error (5, "Missing argument to --linkres");
Environment.Exit (1);
}
AddResource (new AssemblyResource (args[++i], args[i]));
return true;
case "--resource":
case "--res":
Report.Warning (-29, 1, "Compatibility: Use -res:VALUE instead of --res VALUE");
if ((i + 1) >= args.Length){
Usage ();
Report.Error (5, "Missing argument to --resource");
Environment.Exit (1);
}
AddResource (new AssemblyResource (args[++i], args[i], true));
return true;
case "--target":
Report.Warning (-29, 1, "Compatibility: Use -target:KIND instead of --target KIND");
if ((i + 1) >= args.Length){
Environment.Exit (1);
return true;
}
string type = args [++i];
switch (type){
case "library":
RootContext.Target = Target.Library;
RootContext.TargetExt = ".dll";
break;
case "exe":
RootContext.Target = Target.Exe;
break;
case "winexe":
RootContext.Target = Target.WinExe;
break;
case "module":
RootContext.Target = Target.Module;
RootContext.TargetExt = ".dll";
break;
default:
TargetUsage ();
break;
}
return true;
case "-r":
Report.Warning (-29, 1, "Compatibility: Use -r:LIBRARY instead of -r library");
if ((i + 1) >= args.Length){
Usage ();
Environment.Exit (1);
}
string val = args [++i];
int idx = val.IndexOf ('=');
if (idx > -1) {
string alias = val.Substring (0, idx);
string assembly = val.Substring (idx + 1);
AddAssemblyReference (alias, assembly);
return true;
}
AddAssemblyReference (val);
return true;
case "-L":
Report.Warning (-29, 1, "Compatibility: Use -lib:ARG instead of --L arg");
if ((i + 1) >= args.Length){
Usage ();
Environment.Exit (1);
}
RootContext.ReferencesLookupPaths.Add (args [++i]);
return true;
case "--lint":
RootContext.EnhancedWarnings = true;
return true;
case "--nostdlib":
Report.Warning (-29, 1, "Compatibility: Use -nostdlib instead of --nostdlib");
RootContext.StdLib = false;
return true;
case "--nowarn":
Report.Warning (-29, 1, "Compatibility: Use -nowarn instead of --nowarn");
if ((i + 1) >= args.Length){
Usage ();
Environment.Exit (1);
}
int warn = 0;
try {
warn = Int32.Parse (args [++i]);
} catch {
Usage ();
Environment.Exit (1);
}
Report.SetIgnoreWarning (warn);
return true;
case "--wlevel":
Report.Warning (-29, 1, "Compatibility: Use -warn:LEVEL instead of --wlevel LEVEL");
if ((i + 1) >= args.Length){
Report.Error (
1900,
"--wlevel requires a value from 0 to 4");
Environment.Exit (1);
}
SetWarningLevel (args [++i]);
return true;
case "--mcs-debug":
if ((i + 1) >= args.Length){
Report.Error (5, "--mcs-debug requires an argument");
Environment.Exit (1);
}
try {
Report.DebugFlags = Int32.Parse (args [++i]);
} catch {
Report.Error (5, "Invalid argument to --mcs-debug");
Environment.Exit (1);
}
return true;
case "--about":
About ();
return true;
case "--recurse":
Report.Warning (-29, 1, "Compatibility: Use -recurse:PATTERN option instead --recurse PATTERN");
if ((i + 1) >= args.Length){
Report.Error (5, "--recurse requires an argument");
Environment.Exit (1);
}
ProcessSourceFiles (args [++i], true);
return true;
case "--timestamp":
timestamps = true;
return true;
case "--debug": case "-g":
Report.Warning (-29, 1, "Compatibility: Use -debug option instead of -g or --debug");
RootContext.GenerateDebugInfo = true;
return true;
case "--noconfig":
Report.Warning (-29, 1, "Compatibility: Use -noconfig option instead of --noconfig");
RootContext.LoadDefaultReferences = false;
return true;
default:
if (arg.StartsWith ("--fatal")){
if (arg.StartsWith ("--fatal=")){
if (!Int32.TryParse (arg.Substring (8), out fatal_errors))
fatal_errors = 1;
} else
fatal_errors = 1;
return true;
}
if (arg.StartsWith ("--runtime:", StringComparison.Ordinal)) {
string version = arg.Substring (10);
switch (version) {
case "v1":
case "V1":
RootContext.StdLibRuntimeVersion = RuntimeVersion.v1;
break;
case "v2":
case "V2":
RootContext.StdLibRuntimeVersion = RuntimeVersion.v2;
return true;
case "v4":
case "V4":
RootContext.StdLibRuntimeVersion = RuntimeVersion.v4;
return true;
}
return true;
}
break;
}
return false;
}