ParseResult ParseOptionUnix(string arg, ref string[] args, ref int i, CompilerSettings settings)
{
switch (arg){
case "-v":
CSharpParser.yacc_verbose_flag++;
return ParseResult.Success;
case "--version":
Version ();
return ParseResult.Stop;
case "--parse":
settings.ParseOnly = true;
return ParseResult.Success;
case "--main": case "-m":
report.Warning (-29, 1, "Compatibility: Use -main:CLASS instead of --main CLASS or -m CLASS");
if ((i + 1) >= args.Length){
Error_RequiresArgument (arg);
return ParseResult.Error;
}
settings.MainClass = args[++i];
return ParseResult.Success;
case "--unsafe":
report.Warning (-29, 1, "Compatibility: Use -unsafe instead of --unsafe");
settings.Unsafe = true;
return ParseResult.Success;
case "/?": case "/h": case "/help":
case "--help":
Usage ();
return ParseResult.Stop;
case "--define":
report.Warning (-29, 1, "Compatibility: Use -d:SYMBOL instead of --define SYMBOL");
if ((i + 1) >= args.Length){
Error_RequiresArgument (arg);
return ParseResult.Error;
}
RootContext.AddConditional (args [++i]);
return ParseResult.Success;
case "--tokenize":
settings.TokenizeOnly = true;
return ParseResult.Success;
case "-o":
case "--output":
report.Warning (-29, 1, "Compatibility: Use -out:FILE instead of --output FILE or -o FILE");
if ((i + 1) >= args.Length){
Error_RequiresArgument (arg);
return ParseResult.Error;
}
settings.OutputFile = args[++i];
return ParseResult.Success;
case "--checked":
report.Warning (-29, 1, "Compatibility: Use -checked instead of --checked");
settings.Checked = true;
return ParseResult.Success;
case "--stacktrace":
report.Printer.Stacktrace = true;
return ParseResult.Success;
case "--linkresource":
case "--linkres":
report.Warning (-29, 1, "Compatibility: Use -linkres:VALUE instead of --linkres VALUE");
if ((i + 1) >= args.Length){
Error_RequiresArgument (arg);
return ParseResult.Error;
}
AddResource (new AssemblyResource (args[++i], args[i]), settings);
return ParseResult.Success;
case "--resource":
case "--res":
report.Warning (-29, 1, "Compatibility: Use -res:VALUE instead of --res VALUE");
if ((i + 1) >= args.Length){
Error_RequiresArgument (arg);
return ParseResult.Error;
}
AddResource (new AssemblyResource (args[++i], args[i], true), settings);
return ParseResult.Success;
case "--target":
report.Warning (-29, 1, "Compatibility: Use -target:KIND instead of --target KIND");
if ((i + 1) >= args.Length){
Error_RequiresArgument (arg);
return ParseResult.Error;
}
string type = args [++i];
switch (type){
case "library":
settings.Target = Target.Library;
settings.TargetExt = ".dll";
break;
case "exe":
settings.Target = Target.Exe;
break;
case "winexe":
settings.Target = Target.WinExe;
break;
case "module":
settings.Target = Target.Module;
settings.TargetExt = ".dll";
break;
default:
report.Error (2019, "Invalid target type for -target. Valid options are `exe', `winexe', `library' or `module'");
break;
}
return ParseResult.Success;
case "-r":
report.Warning (-29, 1, "Compatibility: Use -r:LIBRARY instead of -r library");
if ((i + 1) >= args.Length){
Error_RequiresArgument (arg);
return ParseResult.Error;
}
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, settings);
return ParseResult.Success;
}
settings.AssemblyReferences.Add (val);
return ParseResult.Success;
case "-L":
report.Warning (-29, 1, "Compatibility: Use -lib:ARG instead of --L arg");
if ((i + 1) >= args.Length){
Error_RequiresArgument (arg);
return ParseResult.Error;
}
settings.ReferencesLookupPaths.Add (args [++i]);
return ParseResult.Success;
case "--lint":
settings.EnhancedWarnings = true;
return ParseResult.Success;
case "--nostdlib":
report.Warning (-29, 1, "Compatibility: Use -nostdlib instead of --nostdlib");
settings.StdLib = false;
return ParseResult.Success;
case "--nowarn":
report.Warning (-29, 1, "Compatibility: Use -nowarn instead of --nowarn");
if ((i + 1) >= args.Length){
Error_RequiresArgument (arg);
return ParseResult.Error;
}
int warn = 0;
try {
warn = int.Parse (args [++i]);
} catch {
Usage ();
//Environment.Exit (1);
}
report.SetIgnoreWarning (warn);
return ParseResult.Success;
case "--wlevel":
report.Warning (-29, 1, "Compatibility: Use -warn:LEVEL instead of --wlevel LEVEL");
if ((i + 1) >= args.Length){
Error_RequiresArgument (arg);
return ParseResult.Error;
}
SetWarningLevel (args [++i]);
return ParseResult.Success;
case "--mcs-debug":
if ((i + 1) >= args.Length){
Error_RequiresArgument (arg);
return ParseResult.Error;
}
try {
Report.DebugFlags = int.Parse (args [++i]);
} catch {
Error_RequiresArgument (arg);
return ParseResult.Error;
}
return ParseResult.Success;
case "--about":
About ();
return ParseResult.Stop;
case "--recurse":
report.Warning (-29, 1, "Compatibility: Use -recurse:PATTERN option instead --recurse PATTERN");
if ((i + 1) >= args.Length){
Error_RequiresArgument (arg);
return ParseResult.Error;
}
ProcessSourceFiles (args [++i], true);
return ParseResult.Success;
case "--timestamp":
settings.Timestamps = true;
return ParseResult.Success;
case "--debug": case "-g":
report.Warning (-29, 1, "Compatibility: Use -debug option instead of -g or --debug");
settings.GenerateDebugInfo = true;
return ParseResult.Success;
case "--noconfig":
report.Warning (-29, 1, "Compatibility: Use -noconfig option instead of --noconfig");
settings.LoadDefaultReferences = false;
return ParseResult.Success;
default:
if (arg.StartsWith ("--fatal")){
int fatal = 1;
if (arg.StartsWith ("--fatal="))
int.TryParse (arg.Substring (8), out fatal);
report.Printer.FatalCounter = fatal;
return ParseResult.Success;
}
if (arg.StartsWith ("--runtime:", StringComparison.Ordinal)) {
string version = arg.Substring (10);
switch (version) {
case "v1":
case "V1":
settings.StdLibRuntimeVersion = RuntimeVersion.v1;
break;
case "v2":
case "V2":
settings.StdLibRuntimeVersion = RuntimeVersion.v2;
break;
case "v4":
case "V4":
settings.StdLibRuntimeVersion = RuntimeVersion.v4;
break;
}
return ParseResult.Success;
}
return ParseResult.UnknownOption;
}
}