namespace Mono.ILASM {
- public class Report {
+ public abstract class Report {
- private int error_count;
- private int mark_count;
- private bool quiet;
+ 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 () : this (false)
+ static Report ()
{
-
+ error_count = 0;
+ quiet = false;
}
- public Report (bool quiet)
- {
- this.error_count = 0;
- this.quiet = quiet;
+ public static int ErrorCount {
+ get { return error_count; }
}
- public int ErrorCount {
- get { return error_count; }
+ public static bool Quiet {
+ get { return quiet; }
+ set { quiet = value; }
+ }
+
+ 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 void Error (string message)
+ public static void Error (string message)
+ {
+ Error (null, message);
+ }
+
+ public static void Error (Location location, string message)
{
error_count++;
- Console.WriteLine (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));
}
- public void Message (string message)
+ public static void Message (string message)
{
if (quiet)
return;
Console.WriteLine (message);
}
- private string GetListing (string listing)
+ 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)
+ {
+ }
+ }
+
}