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