Jordan Rose | 98e7369 | 2013-01-10 18:50:46 +0000 | [diff] [blame] | 1 | // Define the diagnostic mappings. |
| 2 | class DiagMapping; |
| 3 | def MAP_IGNORE : DiagMapping; |
| 4 | def MAP_WARNING : DiagMapping; |
| 5 | def MAP_ERROR : DiagMapping; |
| 6 | def MAP_FATAL : DiagMapping; |
| 7 | |
| 8 | // Define the diagnostic classes. |
| 9 | class DiagClass; |
| 10 | def CLASS_NOTE : DiagClass; |
| 11 | def CLASS_WARNING : DiagClass; |
| 12 | def CLASS_EXTENSION : DiagClass; |
| 13 | def CLASS_ERROR : DiagClass; |
| 14 | |
| 15 | class DiagGroup<string Name, list<DiagGroup> subgroups = []> { |
| 16 | string GroupName = Name; |
| 17 | list<DiagGroup> SubGroups = subgroups; |
| 18 | string CategoryName = ""; |
| 19 | } |
| 20 | class InGroup<DiagGroup G> { DiagGroup Group = G; } |
| 21 | |
| 22 | // All diagnostics emitted by the compiler are an indirect subclass of this. |
| 23 | class Diagnostic<string text, DiagClass DC, DiagMapping defaultmapping> { |
| 24 | string Text = text; |
| 25 | DiagClass Class = DC; |
| 26 | DiagMapping DefaultMapping = defaultmapping; |
| 27 | DiagGroup Group; |
| 28 | string CategoryName = ""; |
| 29 | } |
| 30 | |
| 31 | class Error<string str> : Diagnostic<str, CLASS_ERROR, MAP_ERROR>; |
| 32 | class Warning<string str> : Diagnostic<str, CLASS_WARNING, MAP_WARNING>; |
| 33 | class Extension<string str> : Diagnostic<str, CLASS_EXTENSION, MAP_IGNORE>; |
| 34 | class ExtWarn<string str> : Diagnostic<str, CLASS_EXTENSION, MAP_WARNING>; |
| 35 | class Note<string str> : Diagnostic<str, CLASS_NOTE, MAP_FATAL/*ignored*/>; |