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<string> response_file_list = null;
bool parsing_options = true;
stop_argument = false;
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);
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);
continue;
case ParseResult.Stop:
stop_argument = true;
- return settings;
+ return true;
case ParseResult.UnknownOption:
if (UnknownOptionHandler != null) {
var ret = UnknownOptionHandler (args, i);
}
Error_WrongOption (arg);
- return null;
+ return false;
case ParseResult.Stop:
stop_argument = true;
- return settings;
+ return true;
}
}
}
ProcessSourceFiles (arg, false, settings.SourceFiles);
}
- if (report.Errors > 0)
- return null;
-
- return settings;
+ return report.Errors == 0;
}
void ProcessSourceFiles (string spec, bool recurse, List<SourceFile> sourceFiles)
static bool IsExternAliasValid (string identifier)
{
- if (identifier.Length == 0)
- return false;
- if (identifier[0] != '_' && !char.IsLetter (identifier[0]))
- return false;
-
- for (int i = 1; i < identifier.Length; i++) {
- char c = identifier[i];
- if (char.IsLetter (c) || char.IsDigit (c))
- continue;
-
- UnicodeCategory category = char.GetUnicodeCategory (c);
- if (category != UnicodeCategory.Format || category != UnicodeCategory.NonSpacingMark ||
- category != UnicodeCategory.SpacingCombiningMark ||
- category != UnicodeCategory.ConnectorPunctuation)
- return false;
- }
-
- return true;
+ return Tokenizer.IsValidIdentifier (identifier);
}
static string[] LoadArgs (string file)