diff options
author | Chris Lattner <sabre@nondot.org> | 2009-04-16 06:07:15 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-04-16 06:07:15 +0000 |
commit | 6c440329f15d0bbbe1a9437b5c5f285c38e359b2 (patch) | |
tree | 827d74c9990ecd2d7378e7b7b328ace4b5c1d69c /clang/lib/Basic/Diagnostic.cpp | |
parent | 6a64cc67768ec36169154a8a79535dcb9938acbe (diff) | |
download | bcm5719-llvm-6c440329f15d0bbbe1a9437b5c5f285c38e359b2.tar.gz bcm5719-llvm-6c440329f15d0bbbe1a9437b5c5f285c38e359b2.zip |
merge several scattered tables into StaticDiagInfo.
llvm-svn: 69272
Diffstat (limited to 'clang/lib/Basic/Diagnostic.cpp')
-rw-r--r-- | clang/lib/Basic/Diagnostic.cpp | 163 |
1 files changed, 19 insertions, 144 deletions
diff --git a/clang/lib/Basic/Diagnostic.cpp b/clang/lib/Basic/Diagnostic.cpp index b541d084f06..7242026b247 100644 --- a/clang/lib/Basic/Diagnostic.cpp +++ b/clang/lib/Basic/Diagnostic.cpp @@ -34,18 +34,25 @@ using namespace clang; // Builtin Diagnostic information //===----------------------------------------------------------------------===// -// DefaultDiagnosticMappings - This specifies the default mapping for each diag, -// based on its kind. +// Diagnostic classes. +enum { + CLASS_NOTE = 0x01, + CLASS_WARNING = 0x02, + CLASS_EXTENSION = 0x03, + CLASS_ERROR = 0x04 +}; struct StaticDiagInfoRec { - unsigned DiagID : 14; - unsigned Mapping : 2; + unsigned short DiagID; + unsigned Mapping : 3; + unsigned Class : 3; + const char *Description; const char *OptionGroup; }; static const StaticDiagInfoRec StaticDiagInfo[] = { #define DIAG(ENUM,CLASS,DEFAULT_MAPPING,DESC,GROUP) \ - { diag::ENUM, DEFAULT_MAPPING-1, GROUP }, + { diag::ENUM, DEFAULT_MAPPING, CLASS, DESC, GROUP }, #include "clang/Basic/DiagnosticCommonKinds.inc" #include "clang/Basic/DiagnosticDriverKinds.inc" #include "clang/Basic/DiagnosticFrontendKinds.inc" @@ -54,7 +61,7 @@ static const StaticDiagInfoRec StaticDiagInfo[] = { #include "clang/Basic/DiagnosticASTKinds.inc" #include "clang/Basic/DiagnosticSemaKinds.inc" #include "clang/Basic/DiagnosticAnalysisKinds.inc" -{ 0, 0, 0 } +{ 0, 0, 0, 0, 0 } }; #undef DIAG @@ -69,7 +76,7 @@ static const StaticDiagInfoRec *GetDiagInfo(unsigned DiagID) { static unsigned GetDefaultDiagMapping(unsigned DiagID) { if (const StaticDiagInfoRec *Info = GetDiagInfo(DiagID)) - return Info->Mapping+1; + return Info->Mapping; return diag::MAP_FATAL; } @@ -82,132 +89,14 @@ const char *Diagnostic::getWarningOptionForDiag(unsigned DiagID) { return 0; } - -// Diagnostic classes. -enum { - CLASS_NOTE = 0x01, - CLASS_WARNING = 0x02, - CLASS_EXTENSION = 0x03, - CLASS_ERROR = 0x04 -}; - -/// DiagnosticClasses - The class for each diagnostic. -#define DIAG(ENUM,CLASS,DEFAULT_MAPPING,DESC,GROUP) CLASS, -static unsigned char DiagnosticClassesCommon[] = { -#include "clang/Basic/DiagnosticCommonKinds.inc" - 0 -}; -static unsigned char DiagnosticClassesDriver[] = { -#include "clang/Basic/DiagnosticDriverKinds.inc" - 0 -}; -static unsigned char DiagnosticClassesFrontend[] = { -#include "clang/Basic/DiagnosticFrontendKinds.inc" - 0 -}; -static unsigned char DiagnosticClassesLex[] = { -#include "clang/Basic/DiagnosticLexKinds.inc" - 0 -}; -static unsigned char DiagnosticClassesParse[] = { -#include "clang/Basic/DiagnosticParseKinds.inc" - 0 -}; -static unsigned char DiagnosticClassesAST[] = { -#include "clang/Basic/DiagnosticASTKinds.inc" - 0 -}; -static unsigned char DiagnosticClassesSema[] = { -#include "clang/Basic/DiagnosticSemaKinds.inc" - 0 -}; -static unsigned char DiagnosticClassesAnalysis[] = { -#include "clang/Basic/DiagnosticAnalysisKinds.inc" - 0 -}; -#undef DIAG - /// getDiagClass - Return the class field of the diagnostic. /// static unsigned getBuiltinDiagClass(unsigned DiagID) { - assert(DiagID < diag::DIAG_UPPER_LIMIT && - "Diagnostic ID out of range!"); - unsigned char *Arr; - unsigned ArrSize; - if (DiagID <= diag::DIAG_START_DRIVER) { - DiagID -= 0; - Arr = DiagnosticClassesCommon; - ArrSize = sizeof(DiagnosticClassesCommon); - } else if (DiagID <= diag::DIAG_START_FRONTEND) { - DiagID -= diag::DIAG_START_DRIVER + 1; - Arr = DiagnosticClassesDriver; - ArrSize = sizeof(DiagnosticClassesDriver); - } else if (DiagID <= diag::DIAG_START_LEX) { - DiagID -= diag::DIAG_START_FRONTEND + 1; - Arr = DiagnosticClassesFrontend; - ArrSize = sizeof(DiagnosticClassesFrontend); - } else if (DiagID <= diag::DIAG_START_PARSE) { - DiagID -= diag::DIAG_START_LEX + 1; - Arr = DiagnosticClassesLex; - ArrSize = sizeof(DiagnosticClassesLex); - } else if (DiagID <= diag::DIAG_START_AST) { - DiagID -= diag::DIAG_START_PARSE + 1; - Arr = DiagnosticClassesParse; - ArrSize = sizeof(DiagnosticClassesParse); - } else if (DiagID <= diag::DIAG_START_SEMA) { - DiagID -= diag::DIAG_START_AST + 1; - Arr = DiagnosticClassesAST; - ArrSize = sizeof(DiagnosticClassesAST); - - } else if (DiagID <= diag::DIAG_START_ANALYSIS) { - DiagID -= diag::DIAG_START_SEMA + 1; - Arr = DiagnosticClassesSema; - ArrSize = sizeof(DiagnosticClassesSema); - } else { - DiagID -= diag::DIAG_START_ANALYSIS + 1; - Arr = DiagnosticClassesAnalysis; - ArrSize = sizeof(DiagnosticClassesAnalysis); - } - return DiagID < ArrSize ? Arr[DiagID] : ~0U; + if (const StaticDiagInfoRec *Info = GetDiagInfo(DiagID)) + return Info->Class; + return ~0U; } -/// DiagnosticText - An english message to print for the diagnostic. These -/// should be localized. -#define DIAG(ENUM,CLASS,DEFAULT_MAPPING,DESC,GROUP) DESC, -static const char * const DiagnosticTextCommon[] = { -#include "clang/Basic/DiagnosticCommonKinds.inc" - 0 -}; -static const char * const DiagnosticTextDriver[] = { -#include "clang/Basic/DiagnosticDriverKinds.inc" - 0 -}; -static const char * const DiagnosticTextFrontend[] = { -#include "clang/Basic/DiagnosticFrontendKinds.inc" - 0 -}; -static const char * const DiagnosticTextLex[] = { -#include "clang/Basic/DiagnosticLexKinds.inc" - 0 -}; -static const char * const DiagnosticTextParse[] = { -#include "clang/Basic/DiagnosticParseKinds.inc" - 0 -}; -static const char * const DiagnosticTextAST[] = { -#include "clang/Basic/DiagnosticASTKinds.inc" - 0 -}; -static const char * const DiagnosticTextSema[] = { -#include "clang/Basic/DiagnosticSemaKinds.inc" - 0 -}; -static const char * const DiagnosticTextAnalysis[] = { -#include "clang/Basic/DiagnosticAnalysisKinds.inc" - 0 -}; -#undef DIAG - //===----------------------------------------------------------------------===// // Custom Diagnostic information //===----------------------------------------------------------------------===// @@ -338,22 +227,8 @@ bool Diagnostic::isBuiltinExtensionDiag(unsigned DiagID) { /// getDescription - Given a diagnostic ID, return a description of the /// issue. const char *Diagnostic::getDescription(unsigned DiagID) const { - if (DiagID < diag::DIAG_START_DRIVER) - return DiagnosticTextCommon[DiagID]; - else if (DiagID < diag::DIAG_START_FRONTEND) - return DiagnosticTextDriver[DiagID - diag::DIAG_START_DRIVER - 1]; - else if (DiagID < diag::DIAG_START_LEX) - return DiagnosticTextFrontend[DiagID - diag::DIAG_START_FRONTEND - 1]; - else if (DiagID < diag::DIAG_START_PARSE) - return DiagnosticTextLex[DiagID - diag::DIAG_START_LEX - 1]; - else if (DiagID < diag::DIAG_START_AST) - return DiagnosticTextParse[DiagID - diag::DIAG_START_PARSE - 1]; - else if (DiagID < diag::DIAG_START_SEMA) - return DiagnosticTextAST[DiagID - diag::DIAG_START_AST - 1]; - else if (DiagID < diag::DIAG_START_ANALYSIS) - return DiagnosticTextSema[DiagID - diag::DIAG_START_SEMA - 1]; - else if (DiagID < diag::DIAG_UPPER_LIMIT) - return DiagnosticTextAnalysis[DiagID - diag::DIAG_START_ANALYSIS - 1]; + if (const StaticDiagInfoRec *Info = GetDiagInfo(DiagID)) + return Info->Description; return CustomDiagInfo->getDescription(DiagID); } |