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 Andricconst 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 Andricconst 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 Andricconst 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