namespace Mono.ILASM {
- public class Report {
+ public abstract class Report {
- private int error_count;
- private int mark_count;
+ private static int error_count;
+ private static int mark_count;
+ private static bool quiet;
+ /* Current file being processed */
+ private static string file_path;
- public Report ()
+ static Report ()
{
error_count = 0;
+ quiet = false;
}
- public int ErrorCount {
+ public static int ErrorCount {
get { return error_count; }
}
- public void Mark ()
- {
- mark_count = error_count;
- }
+ public static bool Quiet {
+ get { return quiet; }
+ set { quiet = value; }
+ }
- public bool ErrorSinceMark ()
- {
- return (error_count > mark_count);
+ public static string FilePath {
+ get { return file_path; }
+ set { file_path = value; }
}
- public void AssembleFile (string file, string listing,
+ public static void AssembleFile (string file, string listing,
string target, string output)
{
+ if (quiet)
+ return;
Console.WriteLine ("Assembling '{0}' , {1}, to {2} --> '{3}'", file,
GetListing (listing), target, output);
+ Console.WriteLine ();
+ }
+
+ public static void Error (string message)
+ {
+ Error (null, message);
}
- public void Error (int num, string message, Location location)
+ public static void Error (Location location, string message)
{
error_count++;
- Console.WriteLine ("{0} Error {1}: {2}",
- num, location, message);
+ throw new ILAsmException (file_path, location, message);
+ }
+
+ public static void Warning (string message)
+ {
+ Warning (null, message);
+ }
+
+ public static void Warning (Location location, string message)
+ {
+ string location_str = " : ";
+ if (location != null)
+ location_str = " (" + location.line + ", " + location.column + ") : ";
+
+ Console.Error.WriteLine (String.Format ("{0}{1}Warning -- {2}",
+ (file_path != null ? file_path : ""), location_str, message));
}
- private string GetListing (string listing)
+ public static void Message (string message)
+ {
+ if (quiet)
+ return;
+ Console.WriteLine (message);
+ }
+
+ private static string GetListing (string listing)
{
if (listing == null)
return "no listing file";
}
+ public class ILAsmException : Exception {
+
+ string message;
+ string file_path;
+ Location location;
+
+ public ILAsmException (string file_path, Location location, string message)
+ {
+ this.file_path = file_path;
+ this.location = location;
+ this.message = message;
+ }
+
+ public ILAsmException (Location location, string message)
+ : this (null, location, message)
+ {
+ }
+
+ public ILAsmException (string message)
+ : this (null, null, message)
+ {
+ }
+
+ public override string Message {
+ get { return message; }
+ }
+
+ public Location Location {
+ get { return location; }
+ set { location = value; }
+ }
+
+ public string FilePath {
+ get { return file_path; }
+ set { file_path = value; }
+ }
+
+ public override string ToString ()
+ {
+ string location_str = " : ";
+ if (location != null)
+ location_str = " (" + location.line + ", " + location.column + ") : ";
+
+ return String.Format ("{0}{1}Error : {2}",
+ (file_path != null ? file_path : ""), location_str, message);
+ }
+
+ }
+
+ public class InternalErrorException : Exception {
+ public InternalErrorException ()
+ : base ("Internal error")
+ {
+ }
+
+ public InternalErrorException (string message)
+ : base (message)
+ {
+ }
+ }
+
}