From 8aebcb739a4aff5ccf007fd740aa9105071feff4 Mon Sep 17 00:00:00 2001 From: Nate Begeman Date: Thu, 15 Nov 2007 07:30:50 +0000 Subject: [PATCH] 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 --- Basic/IdentifierTable.cpp | 19 +++++++++++++++---- Driver/clang.cpp | 1 + include/clang/Basic/LangOptions.h | 3 ++- include/clang/Basic/TokenKinds.def | 6 +++--- 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) -- 2.40.0