1f22ef01cSRoman Divacky //===--- TokenKinds.cpp - Token Kinds Support -----------------------------===//
2f22ef01cSRoman Divacky //
3f22ef01cSRoman Divacky //                     The LLVM Compiler Infrastructure
4f22ef01cSRoman Divacky //
5f22ef01cSRoman Divacky // This file is distributed under the University of Illinois Open Source
6f22ef01cSRoman Divacky // License. See LICENSE.TXT for details.
7f22ef01cSRoman Divacky //
8f22ef01cSRoman Divacky //===----------------------------------------------------------------------===//
9f22ef01cSRoman Divacky //
10f22ef01cSRoman Divacky //  This file implements the TokenKind enum and support functions.
11f22ef01cSRoman Divacky //
12f22ef01cSRoman Divacky //===----------------------------------------------------------------------===//
13f22ef01cSRoman Divacky 
14f22ef01cSRoman Divacky #include "clang/Basic/TokenKinds.h"
15*59d1ed5bSDimitry Andric #include "llvm/Support/ErrorHandling.h"
16f22ef01cSRoman Divacky using namespace clang;
17f22ef01cSRoman Divacky 
18f22ef01cSRoman Divacky static const char * const TokNames[] = {
19f22ef01cSRoman Divacky #define TOK(X) #X,
20f22ef01cSRoman Divacky #define KEYWORD(X,Y) #X,
21f22ef01cSRoman Divacky #include "clang/Basic/TokenKinds.def"
22*59d1ed5bSDimitry Andric   nullptr
23f22ef01cSRoman Divacky };
24f22ef01cSRoman Divacky 
getTokenName(TokenKind Kind)25*59d1ed5bSDimitry Andric const char *tok::getTokenName(TokenKind Kind) {
26*59d1ed5bSDimitry Andric   if (Kind < tok::NUM_TOKENS)
27f22ef01cSRoman Divacky     return TokNames[Kind];
28*59d1ed5bSDimitry Andric   llvm_unreachable("unknown TokenKind");
29*59d1ed5bSDimitry Andric   return nullptr;
30f22ef01cSRoman Divacky }
31f22ef01cSRoman Divacky 
getPunctuatorSpelling(TokenKind Kind)32*59d1ed5bSDimitry Andric const char *tok::getPunctuatorSpelling(TokenKind Kind) {
33f22ef01cSRoman Divacky   switch (Kind) {
34f22ef01cSRoman Divacky #define PUNCTUATOR(X,Y) case X: return Y;
35f22ef01cSRoman Divacky #include "clang/Basic/TokenKinds.def"
36f22ef01cSRoman Divacky   default: break;
37f22ef01cSRoman Divacky   }
38*59d1ed5bSDimitry Andric   return nullptr;
39*59d1ed5bSDimitry Andric }
40f22ef01cSRoman Divacky 
getKeywordSpelling(TokenKind Kind)41*59d1ed5bSDimitry Andric const char *tok::getKeywordSpelling(TokenKind Kind) {
42*59d1ed5bSDimitry Andric   switch (Kind) {
43*59d1ed5bSDimitry Andric #define KEYWORD(X,Y) case kw_ ## X: return #X;
44*59d1ed5bSDimitry Andric #include "clang/Basic/TokenKinds.def"
45*59d1ed5bSDimitry Andric     default: break;
46*59d1ed5bSDimitry Andric   }
47*59d1ed5bSDimitry Andric   return nullptr;
48f22ef01cSRoman Divacky }
49