Serenity Operating System
1/*
2 * Copyright (c) 2021, Tim Flynn <trflynn89@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include "Token.h"
8#include <AK/Assertions.h>
9#include <AK/DeprecatedString.h>
10#include <stdlib.h>
11
12namespace SQL::AST {
13
14StringView Token::name(TokenType type)
15{
16 switch (type) {
17#define __ENUMERATE_SQL_TOKEN(value, type, category) \
18 case TokenType::type: \
19 return #type##sv;
20 ENUMERATE_SQL_TOKENS
21#undef __ENUMERATE_SQL_TOKEN
22 default:
23 VERIFY_NOT_REACHED();
24 }
25}
26
27TokenCategory Token::category(TokenType type)
28{
29 switch (type) {
30#define __ENUMERATE_SQL_TOKEN(value, type, category) \
31 case TokenType::type: \
32 return TokenCategory::category;
33 ENUMERATE_SQL_TOKENS
34#undef __ENUMERATE_SQL_TOKEN
35 default:
36 VERIFY_NOT_REACHED();
37 }
38}
39
40double Token::double_value() const
41{
42 VERIFY(type() == TokenType::NumericLiteral);
43 DeprecatedString value(m_value);
44
45 if (value[0] == '0' && value.length() >= 2) {
46 if (value[1] == 'x' || value[1] == 'X')
47 return static_cast<double>(strtoul(value.characters() + 2, nullptr, 16));
48 }
49
50 return strtod(value.characters(), nullptr);
51}
52
53}