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