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