private void ProcessFile (string file_path)
{
if (!File.Exists (file_path)) {
Console.WriteLine ("File does not exist: {0}",
file_path);
Environment.Exit (2);
}
Report.AssembleFile (file_path, null,
target_string, output_file);
StreamReader reader = File.OpenText (file_path);
ILTokenizer scanner = new ILTokenizer (reader);
if (show_tokens)
scanner.NewTokenEvent += new NewTokenEvent (ShowToken);
//if (show_method_def)
// MethodTable.MethodDefinedEvent += new MethodDefinedEvent (ShowMethodDef);
//if (show_method_ref)
// MethodTable.MethodReferencedEvent += new MethodReferencedEvent (ShowMethodRef);
if (scan_only) {
ILToken tok;
while ((tok = scanner.NextToken) != ILToken.EOF) {
Console.WriteLine (tok);
}
return;
}
ILParser parser = new ILParser (codegen, scanner);
codegen.BeginSourceFile (file_path);
try {
if (show_parser)
parser.yyparse (new ScannerAdapter (scanner),
new yydebug.yyDebugSimple ());
else
parser.yyparse (new ScannerAdapter (scanner), null);
} catch (ILTokenizingException ilte) {
Report.Error (ilte.Location, "syntax error at token '" + ilte.Token + "'");
} catch (Mono.ILASM.yyParser.yyException ye) {
Report.Error (scanner.Reader.Location, ye.Message);
} catch (ILAsmException ie) {
ie.FilePath = file_path;
ie.Location = scanner.Reader.Location;
throw;
} catch (Exception){
Console.Write ("{0} ({1}, {2}): ",file_path, scanner.Reader.Location.line, scanner.Reader.Location.column);
throw;
} finally {
codegen.EndSourceFile ();
}
}