blob: 3d47863e857546c78f870997b40cd230b554576e [file] [log] [blame]
Reid Spencer5f016e22007-07-11 17:01:13 +00001//===--- TokenKinds.cpp - Token Kinds Support -----------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner0bc735f2007-12-29 19:59:25 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Reid Spencer5f016e22007-07-11 17:01:13 +00007//
8//===----------------------------------------------------------------------===//
9//
10// This file implements the TokenKind enum and support functions.
11//
12//===----------------------------------------------------------------------===//
13
14#include "clang/Basic/TokenKinds.h"
Ted Kremeneka2bfb912007-10-24 19:06:02 +000015
Reid Spencer5f016e22007-07-11 17:01:13 +000016#include <cassert>
17using namespace clang;
18
19static const char * const TokNames[] = {
20#define TOK(X) #X,
21#define KEYWORD(X,Y) #X,
22#include "clang/Basic/TokenKinds.def"
23 0
24};
25
26const char *tok::getTokenName(enum TokenKind Kind) {
27 assert(Kind < tok::NUM_TOKENS);
28 return TokNames[Kind];
29}
Douglas Gregor4b2d3f72009-02-26 21:00:50 +000030
31/// \brief Determines the spelling of simple punctuation tokens like
32/// '!' or '%', and returns NULL for literal and annotation tokens.
33const char *tok::getTokenSpelling(enum TokenKind Kind) {
34 switch (Kind) {
35 case tok::l_square: return "[";
36 case tok::r_square: return "]";
37 case tok::l_paren: return "(";
38 case tok::r_paren: return ")";
39 case tok::l_brace: return "{";
40 case tok::r_brace: return "}";
41 case tok::period: return ".";
42 case tok::ellipsis: return "...";
43 case tok::amp: return "&";
44 case tok::ampamp: return "&&";
45 case tok::ampequal: return "&=";
46 case tok::star: return "*";
47 case tok::starequal: return "*=";
48 case tok::plus: return "+";
49 case tok::plusplus: return "++";
50 case tok::plusequal: return "+=";
51 case tok::minus: return "-";
52 case tok::arrow: return "->";
53 case tok::minusminus: return "--";
54 case tok::minusequal: return "-=";
55 case tok::tilde: return "~";
56 case tok::exclaim: return "!";
57 case tok::exclaimequal: return "!=";
58 case tok::slash: return "/";
59 case tok::slashequal: return "/=";
60 case tok::percent: return "%";
61 case tok::percentequal: return "%=";
62 case tok::less: return "<";
63 case tok::lessless: return "<<";
64 case tok::lessequal: return "<=";
65 case tok::lesslessequal: return "<<=";
66 case tok::greater: return ">";
67 case tok::greatergreater: return ">>";
68 case tok::greaterequal: return ">=";
69 case tok::greatergreaterequal: return ">>=";
70 case tok::caret: return "^";
71 case tok::caretequal: return "^=";
72 case tok::pipe: return "|";
73 case tok::pipepipe: return "||";
74 case tok::pipeequal: return "|=";
75 case tok::question: return "?";
76 case tok::colon: return ":";
77 case tok::semi: return ";";
78 case tok::equal: return "=";
79 case tok::equalequal: return "==";
80 case tok::comma: return ",";
81 case tok::hash: return "#";
82 case tok::hashhash: return "##";
83 case tok::hashat: return "#@";
84 case tok::periodstar: return ".*";
85 case tok::arrowstar: return "->*";
86 case tok::coloncolon: return "::";
87 case tok::at: return "@";
88 default: break;
89 }
90
91 return 0;
92}