Serenity Operating System
at master 53 lines 1.2 kB view raw
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}