// 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 subgroups = []> { string GroupName = Name; list SubGroups = subgroups; string CategoryName = ""; } class InGroup { DiagGroup Group = G; } // All diagnostics emitted by the compiler are an indirect subclass of this. class Diagnostic { string Text = text; DiagClass Class = DC; DiagMapping DefaultMapping = defaultmapping; DiagGroup Group; string CategoryName = ""; } class Error : Diagnostic; class Warning : Diagnostic; class Extension : Diagnostic; class ExtWarn : Diagnostic; class Note : Diagnostic;