]> granicus.if.org Git - clang/commitdiff
Break out bool/true/false support into a LangOption
authorNate Begeman <natebegeman@mac.com>
Thu, 15 Nov 2007 07:30:50 +0000 (07:30 +0000)
committerNate Begeman <natebegeman@mac.com>
Thu, 15 Nov 2007 07:30:50 +0000 (07:30 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44164 91177308-0d34-0410-b5e6-96231b3b80d8

Basic/IdentifierTable.cpp
Driver/clang.cpp
include/clang/Basic/LangOptions.h
include/clang/Basic/TokenKinds.def

index c1830fa0ab52dda8db6d05d451563ba07508debf..73be7d34dda59497f00ee2b46cf9c504fe60e435 100644 (file)
@@ -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) \
index 5897da32a36b520a8e7fe639214b87a5285db48e..b31cee44d84a75f9b4b0e7c84a59a02b44f0da1f 100644 (file)
@@ -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:
index afd91e2405a0d4e5213442ccf18b5cf6d778803b..e47df24d46bc354cff7ab3cd919adce6c19737ff 100644 (file)
@@ -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;
   }
 };
 
index d0eeada4740aafcec1ec9db22a90d6392298b9a9..ca9beea886246f32305152cba2c98a25b76b62bc 100644 (file)
@@ -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)