| // Define the diagnostic mappings. |
| class DiagMapping; |
| def MAP_IGNORE : DiagMapping; |
| def MAP_WARNING : DiagMapping; |
| def MAP_ERROR : DiagMapping; |
| def MAP_FATAL : DiagMapping; |
| |
| // Define the diagnostic classes. |
| class DiagClass; |
| def CLASS_NOTE : DiagClass; |
| def CLASS_WARNING : DiagClass; |
| def CLASS_EXTENSION : DiagClass; |
| def CLASS_ERROR : DiagClass; |
| |
| class DiagGroup<string Name, list<DiagGroup> subgroups = []> { |
| string GroupName = Name; |
| list<DiagGroup> SubGroups = subgroups; |
| string CategoryName = ""; |
| } |
| class InGroup<DiagGroup G> { DiagGroup Group = G; } |
| |
| // All diagnostics emitted by the compiler are an indirect subclass of this. |
| class Diagnostic<string text, DiagClass DC, DiagMapping defaultmapping> { |
| string Text = text; |
| DiagClass Class = DC; |
| DiagMapping DefaultMapping = defaultmapping; |
| DiagGroup Group; |
| string CategoryName = ""; |
| } |
| |
| class Error<string str> : Diagnostic<str, CLASS_ERROR, MAP_ERROR>; |
| class Warning<string str> : Diagnostic<str, CLASS_WARNING, MAP_WARNING>; |
| class Extension<string str> : Diagnostic<str, CLASS_EXTENSION, MAP_IGNORE>; |
| class ExtWarn<string str> : Diagnostic<str, CLASS_EXTENSION, MAP_WARNING>; |
| class Note<string str> : Diagnostic<str, CLASS_NOTE, MAP_FATAL/*ignored*/>; |