1*7330f729Sjoerg //===--- TokenKinds.cpp - Token Kinds Support -----------------------------===// 2*7330f729Sjoerg // 3*7330f729Sjoerg // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*7330f729Sjoerg // See https://llvm.org/LICENSE.txt for license information. 5*7330f729Sjoerg // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*7330f729Sjoerg // 7*7330f729Sjoerg //===----------------------------------------------------------------------===// 8*7330f729Sjoerg // 9*7330f729Sjoerg // This file implements the TokenKind enum and support functions. 10*7330f729Sjoerg // 11*7330f729Sjoerg //===----------------------------------------------------------------------===// 12*7330f729Sjoerg 13*7330f729Sjoerg #include "clang/Basic/TokenKinds.h" 14*7330f729Sjoerg #include "llvm/Support/ErrorHandling.h" 15*7330f729Sjoerg using namespace clang; 16*7330f729Sjoerg 17*7330f729Sjoerg static const char * const TokNames[] = { 18*7330f729Sjoerg #define TOK(X) #X, 19*7330f729Sjoerg #define KEYWORD(X,Y) #X, 20*7330f729Sjoerg #include "clang/Basic/TokenKinds.def" 21*7330f729Sjoerg nullptr 22*7330f729Sjoerg }; 23*7330f729Sjoerg getTokenName(TokenKind Kind)24*7330f729Sjoergconst char *tok::getTokenName(TokenKind Kind) { 25*7330f729Sjoerg if (Kind < tok::NUM_TOKENS) 26*7330f729Sjoerg return TokNames[Kind]; 27*7330f729Sjoerg llvm_unreachable("unknown TokenKind"); 28*7330f729Sjoerg return nullptr; 29*7330f729Sjoerg } 30*7330f729Sjoerg getPunctuatorSpelling(TokenKind Kind)31*7330f729Sjoergconst char *tok::getPunctuatorSpelling(TokenKind Kind) { 32*7330f729Sjoerg switch (Kind) { 33*7330f729Sjoerg #define PUNCTUATOR(X,Y) case X: return Y; 34*7330f729Sjoerg #include "clang/Basic/TokenKinds.def" 35*7330f729Sjoerg default: break; 36*7330f729Sjoerg } 37*7330f729Sjoerg return nullptr; 38*7330f729Sjoerg } 39*7330f729Sjoerg getKeywordSpelling(TokenKind Kind)40*7330f729Sjoergconst char *tok::getKeywordSpelling(TokenKind Kind) { 41*7330f729Sjoerg switch (Kind) { 42*7330f729Sjoerg #define KEYWORD(X,Y) case kw_ ## X: return #X; 43*7330f729Sjoerg #include "clang/Basic/TokenKinds.def" 44*7330f729Sjoerg default: break; 45*7330f729Sjoerg } 46*7330f729Sjoerg return nullptr; 47*7330f729Sjoerg } 48*7330f729Sjoerg isAnnotation(TokenKind Kind)49*7330f729Sjoergbool tok::isAnnotation(TokenKind Kind) { 50*7330f729Sjoerg switch (Kind) { 51*7330f729Sjoerg #define ANNOTATION(X) case annot_ ## X: return true; 52*7330f729Sjoerg #include "clang/Basic/TokenKinds.def" 53*7330f729Sjoerg default: 54*7330f729Sjoerg break; 55*7330f729Sjoerg } 56*7330f729Sjoerg return false; 57*7330f729Sjoerg } 58*7330f729Sjoerg isPragmaAnnotation(TokenKind Kind)59*7330f729Sjoergbool tok::isPragmaAnnotation(TokenKind Kind) { 60*7330f729Sjoerg switch (Kind) { 61*7330f729Sjoerg #define PRAGMA_ANNOTATION(X) case annot_ ## X: return true; 62*7330f729Sjoerg #include "clang/Basic/TokenKinds.def" 63*7330f729Sjoerg default: 64*7330f729Sjoerg break; 65*7330f729Sjoerg } 66*7330f729Sjoerg return false; 67*7330f729Sjoerg } 68