#include #include #include #include "clang/Basic/TokenKinds.def" #include "clang/Basic/OperatorKinds.def"">

clang: lib/Basic/IdentifierTable.cpp File Reference (original) (raw)

#include "[clang/Basic/IdentifierTable.h](IdentifierTable%5F8h%5Fsource.html)"
#include "[clang/Basic/CharInfo.h](CharInfo%5F8h%5Fsource.html)"
#include "[clang/Basic/DiagnosticLex.h](DiagnosticLex%5F8h%5Fsource.html)"
#include "[clang/Basic/LangOptions.h](LangOptions%5F8h%5Fsource.html)"
#include "[clang/Basic/OperatorKinds.h](OperatorKinds%5F8h%5Fsource.html)"
#include "[clang/Basic/Specifiers.h](Specifiers%5F8h%5Fsource.html)"
#include "[clang/Basic/TargetBuiltins.h](TargetBuiltins%5F8h%5Fsource.html)"
#include "[clang/Basic/TokenKinds.h](TokenKinds%5F8h%5Fsource.html)"
#include "llvm/ADT/DenseMapInfo.h"
#include "llvm/ADT/FoldingSet.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/Allocator.h"
#include "llvm/Support/raw_ostream.h"
#include <cassert>
#include <cstdio>
#include <cstring>
#include <string>
#include "clang/Basic/TokenKinds.def"
#include "clang/Basic/OperatorKinds.def"

Go to the source code of this file.

Macros
#define KEYWORD(NAME, FLAGS)
#define ALIAS(NAME, TOK, FLAGS)
#define CXX_KEYWORD_OPERATOR(NAME, ALIAS)
#define OBJC_AT_KEYWORD(NAME)
#define NOTABLE_IDENTIFIER(NAME) AddNotableIdentifier(StringRef(#NAME), tok::NAME, *this);
#define TESTING_KEYWORD(NAME, FLAGS)
#define KEYWORD(NAME, FLAGS) case tok::kw_##NAME: return getKeywordStatus(LangOpts, FLAGS);
#define HASH(LEN, FIRST, THIRD) (LEN << 6) + (((FIRST - 'a') - (THIRD - 'a')) & 63)
#define CASE(LEN, FIRST, THIRD, NAME)
#define OVERLOADED_OPERATOR(Name, Spelling, Token, Unary, Binary, MemberOnly) case OO_##Name: return Spelling;
#define KEYWORD(NAME, FLAGS) .Case(#NAME, FLAGS)
Functions
static KeywordStatus getKeywordStatusHelper (const LangOptions &LangOpts, TokenKey Flag)
static KeywordStatus getKeywordStatus (const LangOptions &LangOpts, unsigned Flags)
Translates flags as specified in TokenKinds.def into keyword status in the given language standard.
static void AddKeyword (StringRef Keyword, tok::TokenKind TokenCode, unsigned Flags, const LangOptions &LangOpts, IdentifierTable &Table)
AddKeyword - This method is used to associate a token ID with specific identifiers because they are language keywords.
static void AddCXXOperatorKeyword (StringRef Keyword, tok::TokenKind TokenCode, IdentifierTable &Table)
AddCXXOperatorKeyword - Register a C++ operator keyword alternative representations.
static void AddObjCKeyword (StringRef Name, tok::ObjCKeywordKind ObjCID, IdentifierTable &Table)
AddObjCKeyword - Register an Objective-C @keyword like "class" "selector" or "property".
static void AddNotableIdentifier (StringRef Name, tok::NotableIdentifierKind BTID, IdentifierTable &Table)
static KeywordStatus getTokenKwStatus (const LangOptions &LangOpts, tok::TokenKind K)
Checks if the specified token kind represents a keyword in the specified language.
static bool startsWithWord (StringRef name, StringRef word)
Interpreting the given string using the normal CamelCase conventions, determine whether the given string starts with the given "word", which is assumed to end in a lowercase letter.
static SelectorTableImpl & getSelectorTableImpl (void *P)

ALIAS

| #define ALIAS | ( | | NAME, | | ----------------------------------------------------------------- | - | | ----- | | | TOK, | | | | | | FLAGS | | | | | ) | | | |

Value:

FLAGS, LangOpts, *this);

static void AddKeyword(StringRef Keyword, tok::TokenKind TokenCode, unsigned Flags, const LangOptions &LangOpts, IdentifierTable &Table)

AddKeyword - This method is used to associate a token ID with specific identifiers because they are l...

CASE

| #define CASE | ( | | LEN, | | ------------ | - | | ---- | | | FIRST, | | | | | | THIRD, | | | | | | NAME | | | | | ) | | | |

Value:

case HASH(LEN, FIRST, THIRD): \

return memcmp(Name, #NAME, LEN) ? tok::pp_not_keyword : tok::pp_ ## NAME

#define HASH(LEN, FIRST, THIRD)

return(__x > > __y)|(__x<<(32 - __y))

CXX_KEYWORD_OPERATOR

| #define CXX_KEYWORD_OPERATOR | ( | | NAME, | | ------------------------------------------------------------------------- | - | | ----- | | | ALIAS | | | | | ) | | | |

Value:

if (LangOpts.CXXOperatorNames) \

AddCXXOperatorKeyword(StringRef(#NAME), tok::ALIAS, *this);

HASH

| #define HASH | ( | | LEN, | | ------------ | --------------------------------------------------- | | ---- | | | FIRST, | | | | | | THIRD | | | | | ) | (LEN << 6) + (((FIRST - 'a') - (THIRD - 'a')) & 63) | | |

KEYWORD [1/3]

| #define KEYWORD | ( | | NAME, | | --------------- | - | | ----- | | | FLAGS | | | | | ) | | | |

Value:

AddKeyword(StringRef(#NAME), tok::kw_ ## NAME, \

FLAGS, LangOpts, *this);

KEYWORD [2/3]

KEYWORD [3/3]

| #define KEYWORD | ( | | NAME, | | --------------- | ------------------- | | ----- | | | FLAGS | | | | | ) | .Case(#NAME, FLAGS) | | |

NOTABLE_IDENTIFIER

OBJC_AT_KEYWORD

| #define OBJC_AT_KEYWORD | ( | | NAME | ) | | ------------------------- | - | | ---- | - |

Value:

if (LangOpts.ObjC) \

AddObjCKeyword(StringRef(#NAME), tok::objc_##NAME, *this);

OVERLOADED_OPERATOR

| #define OVERLOADED_OPERATOR | ( | | Name, | | ---------------------------- | ---------------------------------------------------------------------------------------------- | | ----- | | | Spelling, | | | | | | Token, | | | | | | Unary, | | | | | | Binary, | | | | | | MemberOnly | | | | | ) | case OO_##Name: return Spelling; | | |

TESTING_KEYWORD

| #define TESTING_KEYWORD | ( | | NAME, | | ------------------------ | - | | ----- | | | FLAGS | | | | | ) | | | |

AddCXXOperatorKeyword()

AddKeyword()

AddNotableIdentifier()

AddObjCKeyword()

getKeywordStatus()

getKeywordStatusHelper()

static KeywordStatus getKeywordStatusHelper ( const LangOptions & LangOpts, TokenKey Flag ) static

getSelectorTableImpl()

static SelectorTableImpl & getSelectorTableImpl ( void * P) static

getTokenKwStatus()

startsWithWord()

static bool startsWithWord ( StringRef name, StringRef word ) static