xref: /freebsd/contrib/llvm-project/clang/lib/Basic/TokenKinds.cpp (revision 81ad626541db97eb356e2c1d4a20eb2a26a766ab)
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 Andric const 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 Andric const 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 Andric const 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 Andric const 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 Andric bool 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 Andric bool 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