xref: /netbsd-src/external/apache2/llvm/dist/clang/lib/Basic/TokenKinds.cpp (revision 7330f729ccf0bd976a06f95fad452fe774fc7fd1)
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*7330f729Sjoerg const 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*7330f729Sjoerg const 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*7330f729Sjoerg const 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*7330f729Sjoerg bool 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*7330f729Sjoerg bool 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