mini-llvm 0.1.0
Loading...
Searching...
No Matches
Token.h
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2
3#pragma once
4
5#include <cstdint>
6#include <cstdlib>
7#include <string>
8#include <variant>
9#include <vector>
10
12
13namespace mini_llvm::ir {
14
15struct Token {
16 enum class Kind {
17#define X(name) k##name,
18#include "mini-llvm/ir_reader/TokenKind.def"
19#undef X
20 };
21
23 std::variant<std::monostate, BigInteger, std::string, std::vector<int8_t>> value;
24 const char *location;
25};
26
27inline bool operator==(const Token &lhs, const Token &rhs) {
28 return lhs.kind == rhs.kind && lhs.value == rhs.value && lhs.location == rhs.location;
29}
30
31inline constexpr const char *name(Token::Kind kind) {
32 switch (kind) {
33#define X(name) case Token::Kind::k##name: return #name;
34#include "mini-llvm/ir_reader/TokenKind.def"
35#undef X
36 default:
37 abort();
38 }
39}
40
41} // namespace mini_llvm::ir
Definition Argument.h:13
bool operator==(const Constant &lhs, const Constant &rhs)
Definition Constant.h:28
constexpr const char * name(Token::Kind kind)
Definition Token.h:31
Definition Token.h:15
const char * location
Definition Token.h:24
std::variant< std::monostate, BigInteger, std::string, std::vector< int8_t > > value
Definition Token.h:23
Kind kind
Definition Token.h:22
Kind
Definition Token.h:16