merge r98600
[mono.git] / mcs / ilasm / Report.cs
1 //
2 // Mono.ILASM.Report
3 //
4 // Author(s):
5 //  Jackson Harper (Jackson@LatitudeGeo.com)
6 //
7 // (C) 2003 Jackson Harper, All rights reserved
8 //
9
10
11 using System;
12 using System.IO;
13
14 namespace Mono.ILASM {
15
16         public abstract class Report {
17
18                 private static int error_count;
19                 private static int mark_count;
20                 private static bool quiet;
21                 /* Current file being processed */
22                 private static string file_path;
23
24                 static Report ()
25                 {
26                         error_count = 0;
27                         quiet = false;
28                 }
29
30                 public static int ErrorCount {
31                         get { return error_count; }
32                 }
33
34                 public static bool Quiet {
35                         get { return quiet; }
36                         set { quiet = value; }
37                 }
38
39                 public static string FilePath {
40                         get { return file_path; }
41                         set { file_path = value; }
42                 }
43
44                 public static void AssembleFile (string file, string listing,
45                                           string target, string output)
46                 {
47                         if (quiet)
48                                 return;
49                         Console.WriteLine ("Assembling '{0}' , {1}, to {2} --> '{3}'", file,
50                                            GetListing (listing), target, output);
51                         Console.WriteLine ();
52                 }
53
54                 public static void Error (string message)
55                 {
56                         Error (null, message);
57                 }
58
59                 public static void Error (Location location, string message)
60                 {
61                         error_count++;
62                         throw new ILAsmException (file_path, location, message);
63                 }
64                 
65                 public static void Warning (string message)
66                 {
67                         Warning (null, message);
68                 }
69
70                 public static void Warning (Location location, string message)
71                 {
72                         string location_str = " : ";
73                         if (location != null)
74                                 location_str = " (" + location.line + ", " + location.column + ") : ";
75
76                         Console.Error.WriteLine (String.Format ("{0}{1}Warning -- {2}",
77                                 (file_path != null ? file_path : ""), location_str, message));
78                 }
79
80                 public static void Message (string message)
81                 {
82                         if (quiet)
83                                 return;
84                         Console.WriteLine (message);
85                 }
86                 
87                 private static string GetListing (string listing)
88                 {
89                         if (listing == null)
90                                 return "no listing file";
91                         return listing;
92                 }
93
94         }
95
96         public class ILAsmException : Exception {
97
98                 string message;
99                 string file_path;
100                 Location location;
101                 
102                 public ILAsmException (string file_path, Location location, string message)
103                 {
104                         this.file_path = file_path;
105                         this.location = location;
106                         this.message = message;
107                 }
108
109                 public ILAsmException (Location location, string message)
110                         : this (null, location, message)
111                 {
112                 }
113
114                 public ILAsmException (string message)
115                         : this (null, null, message)
116                 {
117                 }
118
119                 public override string Message {
120                         get { return message; }
121                 }
122
123                 public Location Location {
124                         get { return location; }
125                         set { location = value; }
126                 }
127
128                 public string FilePath {
129                         get { return file_path; }
130                         set { file_path = value; }
131                 }
132
133                 public override string ToString ()
134                 {
135                         string location_str = " : ";
136                         if (location != null)
137                                 location_str = " (" + location.line + ", " + location.column + ") : ";
138
139                         return String.Format ("{0}{1}Error : {2}",
140                                 (file_path != null ? file_path : ""), location_str, message);
141                 }
142
143         }
144
145         public class InternalErrorException : Exception {
146                 public InternalErrorException ()
147                         : base ("Internal error")
148                 {
149                 }
150
151                 public InternalErrorException (string message)
152                         : base (message)
153                 {
154                 }
155         }
156
157 }
158