15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===--- TokenKinds.cpp - Token Kinds Support -----------------------------===// 25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// The LLVM Compiler Infrastructure 45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// This file is distributed under the University of Illinois Open Source 60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// License. See LICENSE.TXT for details. 75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===// 95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// This file implements the TokenKind enum and support functions. 115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===// 135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "clang/Basic/TokenKinds.h" 15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "llvm/Support/ErrorHandling.h" 165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerusing namespace clang; 175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerstatic const char * const TokNames[] = { 195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define TOK(X) #X, 205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define KEYWORD(X,Y) #X, 215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "clang/Basic/TokenKinds.def" 226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines nullptr 235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesconst char *tok::getTokenName(TokenKind Kind) { 26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (Kind < tok::NUM_TOKENS) 27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return TokNames[Kind]; 28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines llvm_unreachable("unknown TokenKind"); 296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return nullptr; 305f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer} 314b2d3f7bcc4df31157df443af1b80bcaa9b58bbaDouglas Gregor 32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesconst char *tok::getPunctuatorSpelling(TokenKind Kind) { 334b2d3f7bcc4df31157df443af1b80bcaa9b58bbaDouglas Gregor switch (Kind) { 3459c55e724945daa060a5f1aaecbfd4de04770e93Kovarththanan Rajaratnam#define PUNCTUATOR(X,Y) case X: return Y; 3559c55e724945daa060a5f1aaecbfd4de04770e93Kovarththanan Rajaratnam#include "clang/Basic/TokenKinds.def" 364b2d3f7bcc4df31157df443af1b80bcaa9b58bbaDouglas Gregor default: break; 374b2d3f7bcc4df31157df443af1b80bcaa9b58bbaDouglas Gregor } 386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return nullptr; 39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 404b2d3f7bcc4df31157df443af1b80bcaa9b58bbaDouglas Gregor 41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesconst char *tok::getKeywordSpelling(TokenKind Kind) { 42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines switch (Kind) { 43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#define KEYWORD(X,Y) case kw_ ## X: return #X; 44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "clang/Basic/TokenKinds.def" 45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines default: break; 46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return nullptr; 484b2d3f7bcc4df31157df443af1b80bcaa9b58bbaDouglas Gregor} 49