summaryrefslogtreecommitdiff
path: root/lib/Basic/TokenKinds.cpp
blob: c4ac443f4878d62367cf7fdd9072b7f5f7b559f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//===--- TokenKinds.cpp - Token Kinds Support -----------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
//  This file implements the TokenKind enum and support functions.
//
//===----------------------------------------------------------------------===//

#include "flang/Basic/TokenKinds.h"
#include <cassert>

namespace flang {

static char const * const TokNames[] = {
#define TOK(X)       #X,
#define KEYWORD(X,Y) #X,
#define FORMAT_SPEC(X,Y) #X,
#include "flang/Basic/TokenKinds.def"
  0
};

const char *tok::getTokenName(enum TokenKind Kind) {
  assert(Kind < tok::NUM_TOKENS && "Invalid token kind!");
  return TokNames[Kind];
}

const char *tok::getTokenSimpleSpelling(enum TokenKind Kind) {
  switch (Kind) {
  case tok::equal:               return "=";
  case tok::equalequal:          return "==";
  case tok::plus:                return "+";
  case tok::minus:               return "-";
  case tok::star:                return "*";
  case tok::starstar:            return "**";
  case tok::slash:               return "/";
  case tok::slashequal:          return "/=";
  case tok::backslash:           return "\\";
  case tok::l_paren:             return "(";
  case tok::r_paren:             return ")";
  case tok::l_square:            return "[";
  case tok::r_square:            return "]";
  case tok::l_brace:             return "{";
  case tok::r_brace:             return "}";
  case tok::comma:               return ",";
  case tok::period:              return ".";
  case tok::colon:               return ":";
  case tok::coloncolon:          return "::";
  case tok::semicolon:           return ";";
  case tok::exclaim:             return "!";
  case tok::percent:             return "%";
  case tok::ampersand:           return "&";
  case tok::tilde:               return "~";
  case tok::less:                return "<";
  case tok::lessequal:           return "<=";
  case tok::greater:             return ">";
  case tok::greaterequal:        return ">=";
  case tok::question:            return "?";
  case tok::backtick:            return "`";
  case tok::caret:               return "^";
  case tok::pipe:                return "|";
  case tok::dollar:              return "$";
  case tok::hash:                return "#";
  case tok::at:                  return "@";
  default: break;
  }

  return 0;
}

} //namespace flang