merge several scattered tables into StaticDiagInfo.

llvm-svn: 69272
This commit is contained in:
Chris Lattner 2009-04-16 06:07:15 +00:00
parent 6a64cc6776
commit 6c440329f1
1 changed files with 19 additions and 144 deletions

View File

@ -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);
}