10b57cec5SDimitry Andric //===--- TokenKinds.cpp - Token Kinds Support -----------------------------===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric // 90b57cec5SDimitry Andric // This file implements the TokenKind enum and support functions. 100b57cec5SDimitry Andric // 110b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 120b57cec5SDimitry Andric 130b57cec5SDimitry Andric #include "clang/Basic/TokenKinds.h" 140b57cec5SDimitry Andric #include "llvm/Support/ErrorHandling.h" 150b57cec5SDimitry Andric using namespace clang; 160b57cec5SDimitry Andric 170b57cec5SDimitry Andric static const char * const TokNames[] = { 180b57cec5SDimitry Andric #define TOK(X) #X, 190b57cec5SDimitry Andric #define KEYWORD(X,Y) #X, 200b57cec5SDimitry Andric #include "clang/Basic/TokenKinds.def" 210b57cec5SDimitry Andric nullptr 220b57cec5SDimitry Andric }; 230b57cec5SDimitry Andric getTokenName(TokenKind Kind)240b57cec5SDimitry Andricconst char *tok::getTokenName(TokenKind Kind) { 250b57cec5SDimitry Andric if (Kind < tok::NUM_TOKENS) 260b57cec5SDimitry Andric return TokNames[Kind]; 270b57cec5SDimitry Andric llvm_unreachable("unknown TokenKind"); 280b57cec5SDimitry Andric return nullptr; 290b57cec5SDimitry Andric } 300b57cec5SDimitry Andric getPunctuatorSpelling(TokenKind Kind)310b57cec5SDimitry Andricconst char *tok::getPunctuatorSpelling(TokenKind Kind) { 320b57cec5SDimitry Andric switch (Kind) { 330b57cec5SDimitry Andric #define PUNCTUATOR(X,Y) case X: return Y; 340b57cec5SDimitry Andric #include "clang/Basic/TokenKinds.def" 350b57cec5SDimitry Andric default: break; 360b57cec5SDimitry Andric } 370b57cec5SDimitry Andric return nullptr; 380b57cec5SDimitry Andric } 390b57cec5SDimitry Andric getKeywordSpelling(TokenKind Kind)400b57cec5SDimitry Andricconst char *tok::getKeywordSpelling(TokenKind Kind) { 410b57cec5SDimitry Andric switch (Kind) { 420b57cec5SDimitry Andric #define KEYWORD(X,Y) case kw_ ## X: return #X; 430b57cec5SDimitry Andric #include "clang/Basic/TokenKinds.def" 440b57cec5SDimitry Andric default: break; 450b57cec5SDimitry Andric } 460b57cec5SDimitry Andric return nullptr; 470b57cec5SDimitry Andric } 48a7dea167SDimitry Andric getPPKeywordSpelling(tok::PPKeywordKind Kind)49*81ad6265SDimitry Andricconst char *tok::getPPKeywordSpelling(tok::PPKeywordKind Kind) { 50*81ad6265SDimitry Andric switch (Kind) { 51*81ad6265SDimitry Andric #define PPKEYWORD(x) case tok::pp_##x: return #x; 52*81ad6265SDimitry Andric #include "clang/Basic/TokenKinds.def" 53*81ad6265SDimitry Andric default: break; 54*81ad6265SDimitry Andric } 55*81ad6265SDimitry Andric return nullptr; 56*81ad6265SDimitry Andric } 57*81ad6265SDimitry Andric isAnnotation(TokenKind Kind)58a7dea167SDimitry Andricbool tok::isAnnotation(TokenKind Kind) { 59a7dea167SDimitry Andric switch (Kind) { 60a7dea167SDimitry Andric #define ANNOTATION(X) case annot_ ## X: return true; 61a7dea167SDimitry Andric #include "clang/Basic/TokenKinds.def" 62a7dea167SDimitry Andric default: 63a7dea167SDimitry Andric break; 64a7dea167SDimitry Andric } 65a7dea167SDimitry Andric return false; 66a7dea167SDimitry Andric } 67a7dea167SDimitry Andric isPragmaAnnotation(TokenKind Kind)68a7dea167SDimitry Andricbool tok::isPragmaAnnotation(TokenKind Kind) { 69a7dea167SDimitry Andric switch (Kind) { 70a7dea167SDimitry Andric #define PRAGMA_ANNOTATION(X) case annot_ ## X: return true; 71a7dea167SDimitry Andric #include "clang/Basic/TokenKinds.def" 72a7dea167SDimitry Andric default: 73a7dea167SDimitry Andric break; 74a7dea167SDimitry Andric } 75a7dea167SDimitry Andric return false; 76a7dea167SDimitry Andric } 77