//===--- TokenKinds.h - Enum values for C Token Kinds -----------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// \file /// Defines the clang::TokenKind enum and support functions. /// //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_BASIC_TOKENKINDS_H #define LLVM_CLANG_BASIC_TOKENKINDS_H #include "llvm/ADT/DenseMapInfo.h" #include "llvm/Support/Compiler.h" namespace clang { namespace tok { /// Provides a simple uniform namespace for tokens from all C languages. enum TokenKind : unsigned short { … }; /// Provides a namespace for preprocessor keywords which start with a /// '#' at the beginning of the line. enum PPKeywordKind { … }; /// Provides a namespace for Objective-C keywords which start with /// an '@'. enum ObjCKeywordKind { … }; /// Provides a namespace for notable identifers such as float_t and /// double_t. enum NotableIdentifierKind { … }; /// Defines the possible values of an on-off-switch (C99 6.10.6p2). enum OnOffSwitch { … }; /// Determines the name of a token as used within the front end. /// /// The name of a token will be an internal name (such as "l_square") /// and should not be used as part of diagnostic messages. const char *getTokenName(TokenKind Kind) LLVM_READNONE; /// Determines the spelling of simple punctuation tokens like /// '!' or '%', and returns NULL for literal and annotation tokens. /// /// This routine only retrieves the "simple" spelling of the token, /// and will not produce any alternative spellings (e.g., a /// digraph). For the actual spelling of a given Token, use /// Preprocessor::getSpelling(). const char *getPunctuatorSpelling(TokenKind Kind) LLVM_READNONE; /// Determines the spelling of simple keyword and contextual keyword /// tokens like 'int' and 'dynamic_cast'. Returns NULL for other token kinds. const char *getKeywordSpelling(TokenKind Kind) LLVM_READNONE; /// Returns the spelling of preprocessor keywords, such as "else". const char *getPPKeywordSpelling(PPKeywordKind Kind) LLVM_READNONE; /// Return true if this is a raw identifier or an identifier kind. inline bool isAnyIdentifier(TokenKind K) { … } /// Return true if this is a C or C++ string-literal (or /// C++11 user-defined-string-literal) token. inline bool isStringLiteral(TokenKind K) { … } /// Return true if this is a "literal" kind, like a numeric /// constant, string, etc. inline bool isLiteral(TokenKind K) { … } /// Return true if this is any of tok::annot_* kinds. bool isAnnotation(TokenKind K); /// Return true if this is an annotation token representing a pragma. bool isPragmaAnnotation(TokenKind K); inline constexpr bool isRegularKeywordAttribute(TokenKind K) { … } } // end namespace tok } // end namespace clang namespace llvm { template <> struct DenseMapInfo<clang::tok::PPKeywordKind> { … }; } // namespace llvm #endif