aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNate Begeman <natebegeman@mac.com>2007-11-15 07:30:50 +0000
committerNate Begeman <natebegeman@mac.com>2007-11-15 07:30:50 +0000
commit8aebcb739a4aff5ccf007fd740aa9105071feff4 (patch)
tree0db7f55272b6fcbd9008767eda33f8584096e89f
parente7579b57eb3eabfd3545b86320fb67466730e9fc (diff)
Break out bool/true/false support into a LangOption
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44164 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--Basic/IdentifierTable.cpp19
-rw-r--r--Driver/clang.cpp1
-rw-r--r--include/clang/Basic/LangOptions.h3
-rw-r--r--include/clang/Basic/TokenKinds.def6
4 files changed, 21 insertions, 8 deletions
diff --git a/Basic/IdentifierTable.cpp b/Basic/IdentifierTable.cpp
index c1830fa0ab..73be7d34dd 100644
--- a/Basic/IdentifierTable.cpp
+++ b/Basic/IdentifierTable.cpp
@@ -68,10 +68,18 @@ IdentifierTable::IdentifierTable() : HashTable(8192) {}
/// specified language.
static void AddKeyword(const char *Keyword, unsigned KWLen,
tok::TokenKind TokenCode,
- int C90, int C99, int CXX, int CXX0x,
+ int C90, int C99, int CXX, int CXX0x, int BoolSupport,
const LangOptions &LangOpts, IdentifierTable &Table) {
- int Flags = LangOpts.CPlusPlus ? (LangOpts.CPlusPlus0x? CXX0x : CXX)
- : (LangOpts.C99 ? C99 : C90);
+ int Flags = 0;
+ if (BoolSupport != 0) {
+ Flags = LangOpts.Boolean ? BoolSupport : 2;
+ } else if (LangOpts.CPlusPlus) {
+ Flags = LangOpts.CPlusPlus0x ? CXX0x : CXX;
+ } else if (LangOpts.C99) {
+ Flags = C99;
+ } else {
+ Flags = C90;
+ }
// Don't add this keyword if disabled in this language or if an extension
// and extensions are disabled.
@@ -126,6 +134,8 @@ void IdentifierTable::AddKeywords(const LangOptions &LangOpts) {
CPP0xShift = 6,
EXTCPP0x = 1 << CPP0xShift,
NOTCPP0x = 2 << CPP0xShift,
+ BoolShift = 8,
+ BOOLSUPPORT = 1 << BoolShift,
Mask = 3
};
@@ -135,7 +145,8 @@ void IdentifierTable::AddKeywords(const LangOptions &LangOpts) {
((FLAGS) >> C90Shift) & Mask, \
((FLAGS) >> C99Shift) & Mask, \
((FLAGS) >> CPPShift) & Mask, \
- ((FLAGS) >> CPP0xShift) & Mask, LangOpts, *this);
+ ((FLAGS) >> CPP0xShift) & Mask, \
+ ((FLAGS) >> BoolShift) & Mask, LangOpts, *this);
#define ALIAS(NAME, TOK) \
AddAlias(NAME, strlen(NAME), #TOK, strlen(#TOK), LangOpts, *this);
#define CXX_KEYWORD_OPERATOR(NAME, ALIAS) \
diff --git a/Driver/clang.cpp b/Driver/clang.cpp
index 5897da32a3..b31cee44d8 100644
--- a/Driver/clang.cpp
+++ b/Driver/clang.cpp
@@ -316,6 +316,7 @@ static void InitializeLanguageStandard(LangOptions &Options) {
case lang_cxx98:
Options.CPlusPlus = 1;
Options.CXXOperatorNames = !NoOperatorNames;
+ Options.Boolean = 1;
// FALL THROUGH.
case lang_gnu99:
case lang_c99:
diff --git a/include/clang/Basic/LangOptions.h b/include/clang/Basic/LangOptions.h
index afd91e2405..e47df24d46 100644
--- a/include/clang/Basic/LangOptions.h
+++ b/include/clang/Basic/LangOptions.h
@@ -35,11 +35,12 @@ struct LangOptions {
unsigned ObjC2 : 1; // Objective C 2 support enabled.
unsigned PascalStrings : 1; // Allow Pascal strings
+ unsigned Boolean : 1; // Allow bool/true/false
LangOptions() {
Trigraphs = BCPLComment = DollarIdents = Digraphs = ObjC1 = ObjC2 = 0;
C99 = Microsoft = CPlusPlus = CPlusPlus0x = NoExtensions = 0;
- CXXOperatorNames = PascalStrings = 0;
+ CXXOperatorNames = PascalStrings = Boolean = 0;
}
};
diff --git a/include/clang/Basic/TokenKinds.def b/include/clang/Basic/TokenKinds.def
index d0eeada474..ca9beea886 100644
--- a/include/clang/Basic/TokenKinds.def
+++ b/include/clang/Basic/TokenKinds.def
@@ -232,7 +232,7 @@ KEYWORD(__PRETTY_FUNCTION__ , EXTC90|EXTC99|EXTCPP|EXTCPP0x) // GCC Exte
// C++ 2.11p1: Keywords.
KEYWORD(asm , EXTC90|EXTC99) // Exts in C90/C99
-KEYWORD(bool , NOTC90|NOTC99)
+KEYWORD(bool , BOOLSUPPORT)
KEYWORD(catch , NOTC90|NOTC99)
KEYWORD(class , NOTC90|NOTC99)
KEYWORD(const_cast , NOTC90|NOTC99)
@@ -240,7 +240,7 @@ KEYWORD(delete , NOTC90|NOTC99)
KEYWORD(dynamic_cast , NOTC90|NOTC99)
KEYWORD(explicit , NOTC90|NOTC99)
KEYWORD(export , NOTC90|NOTC99)
-KEYWORD(false , NOTC90|NOTC99)
+KEYWORD(false , BOOLSUPPORT)
KEYWORD(friend , NOTC90|NOTC99)
KEYWORD(mutable , NOTC90|NOTC99)
KEYWORD(namespace , NOTC90|NOTC99)
@@ -254,7 +254,7 @@ KEYWORD(static_cast , NOTC90|NOTC99)
KEYWORD(template , NOTC90|NOTC99)
KEYWORD(this , NOTC90|NOTC99)
KEYWORD(throw , NOTC90|NOTC99)
-KEYWORD(true , NOTC90|NOTC99)
+KEYWORD(true , BOOLSUPPORT)
KEYWORD(try , NOTC90|NOTC99)
KEYWORD(typename , NOTC90|NOTC99)
KEYWORD(typeid , NOTC90|NOTC99)