Merge pull request #3705 from BrzVlad/fix-sgen-internal-alloc
[mono.git] / mcs / ilasm / Report.cs
index 02d6536253264f1ef6bbde8ced00fcfc6bc85af2..a7ebafe8afd6eca44c3de0af540220f57491c2a3 100644 (file)
@@ -18,6 +18,8 @@ namespace Mono.ILASM {
                 private static int error_count;
                 private static int mark_count;
                 private static bool quiet;
+                /* Current file being processed */
+                private static string file_path;
 
                 static Report ()
                 {
@@ -34,18 +36,45 @@ namespace Mono.ILASM {
                        set { quiet = value; }
                }
 
+                public static string FilePath {
+                        get { return file_path; }
+                        set { file_path = value; }
+                }
+
                 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 static void Error (Location location, string message)
                 {
                         error_count++;
-                        throw new ILAsmException (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 static void Message (string message)
@@ -67,23 +96,50 @@ namespace Mono.ILASM {
         public class ILAsmException : Exception {
 
                 string message;
+                string file_path;
                 Location location;
                 
-                public ILAsmException (Location location, string message)
+                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)
                 {
-                        this.message = 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 {