Token.cpp 1.2 KB

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