17a51313dSChris Lattner //===--- TokenKinds.cpp - Token Kinds Support -----------------------------===// 27a51313dSChris Lattner // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 67a51313dSChris Lattner // 77a51313dSChris Lattner //===----------------------------------------------------------------------===// 87a51313dSChris Lattner // 97a51313dSChris Lattner // This file implements the TokenKind enum and support functions. 107a51313dSChris Lattner // 117a51313dSChris Lattner //===----------------------------------------------------------------------===// 127a51313dSChris Lattner 137a51313dSChris Lattner #include "clang/Basic/TokenKinds.h" 14637b347eSAlp Toker #include "llvm/Support/ErrorHandling.h" 157a51313dSChris Lattner using namespace clang; 167a51313dSChris Lattner 177a51313dSChris Lattner static const char * const TokNames[] = { 187a51313dSChris Lattner #define TOK(X) #X, 197a51313dSChris Lattner #define KEYWORD(X,Y) #X, 207a51313dSChris Lattner #include "clang/Basic/TokenKinds.def" 21f1186c5aSCraig Topper nullptr 227a51313dSChris Lattner }; 237a51313dSChris Lattner getTokenName(TokenKind Kind)24b3f9501bSAlp Tokerconst char *tok::getTokenName(TokenKind Kind) { 25637b347eSAlp Toker if (Kind < tok::NUM_TOKENS) 267a51313dSChris Lattner return TokNames[Kind]; 27637b347eSAlp Toker llvm_unreachable("unknown TokenKind"); 28f1186c5aSCraig Topper return nullptr; 297a51313dSChris Lattner } 3087f95b0aSDouglas Gregor getPunctuatorSpelling(TokenKind Kind)31b3f9501bSAlp Tokerconst char *tok::getPunctuatorSpelling(TokenKind Kind) { 3287f95b0aSDouglas Gregor switch (Kind) { 337632da4bSKovarththanan Rajaratnam #define PUNCTUATOR(X,Y) case X: return Y; 347632da4bSKovarththanan Rajaratnam #include "clang/Basic/TokenKinds.def" 3587f95b0aSDouglas Gregor default: break; 3687f95b0aSDouglas Gregor } 37f1186c5aSCraig Topper return nullptr; 38a231ad22SAlp Toker } 3987f95b0aSDouglas Gregor getKeywordSpelling(TokenKind Kind)40b3f9501bSAlp Tokerconst char *tok::getKeywordSpelling(TokenKind Kind) { 41a231ad22SAlp Toker switch (Kind) { 42a231ad22SAlp Toker #define KEYWORD(X,Y) case kw_ ## X: return #X; 43a231ad22SAlp Toker #include "clang/Basic/TokenKinds.def" 44a231ad22SAlp Toker default: break; 45a231ad22SAlp Toker } 46f1186c5aSCraig Topper return nullptr; 4787f95b0aSDouglas Gregor } 483c26163dSSerge Pavlov getPPKeywordSpelling(tok::PPKeywordKind Kind)49*7c1ee5e9SSam McCallconst char *tok::getPPKeywordSpelling(tok::PPKeywordKind Kind) { 50*7c1ee5e9SSam McCall switch (Kind) { 51*7c1ee5e9SSam McCall #define PPKEYWORD(x) case tok::pp_##x: return #x; 52*7c1ee5e9SSam McCall #include "clang/Basic/TokenKinds.def" 53*7c1ee5e9SSam McCall default: break; 54*7c1ee5e9SSam McCall } 55*7c1ee5e9SSam McCall return nullptr; 56*7c1ee5e9SSam McCall } 57*7c1ee5e9SSam McCall isAnnotation(TokenKind Kind)58fcb6123dSSerge Pavlovbool tok::isAnnotation(TokenKind Kind) { 59fcb6123dSSerge Pavlov switch (Kind) { 60fcb6123dSSerge Pavlov #define ANNOTATION(X) case annot_ ## X: return true; 61fcb6123dSSerge Pavlov #include "clang/Basic/TokenKinds.def" 62fcb6123dSSerge Pavlov default: 63fcb6123dSSerge Pavlov break; 64fcb6123dSSerge Pavlov } 65fcb6123dSSerge Pavlov return false; 66fcb6123dSSerge Pavlov } 67fcb6123dSSerge Pavlov isPragmaAnnotation(TokenKind Kind)683c26163dSSerge Pavlovbool tok::isPragmaAnnotation(TokenKind Kind) { 693c26163dSSerge Pavlov switch (Kind) { 703c26163dSSerge Pavlov #define PRAGMA_ANNOTATION(X) case annot_ ## X: return true; 713c26163dSSerge Pavlov #include "clang/Basic/TokenKinds.def" 723c26163dSSerge Pavlov default: 733c26163dSSerge Pavlov break; 743c26163dSSerge Pavlov } 753c26163dSSerge Pavlov return false; 763c26163dSSerge Pavlov } 77