cheatah
Source

stdlib/builtins/builtins.cpp

1// Copyright (c) 2026 BigBrain LLC. MIT-licensed (see LICENSE).
2// Original work; see ACKNOWLEDGMENTS.md for the open-source ideas we build upon.
3#include "builtins.hpp"
5#include <algorithm>
6#include <iomanip>
7#include <sstream>
9namespace cheatah::builtins {
11std::size_t len(std::string_view s) { return s.size(); }
13int ord(std::string_view s) { return s.empty() ? 0 : static_cast<unsigned char>(s[0]); }
14std::string chr(int codepoint) { return std::string(1, static_cast<char>(codepoint)); }
16namespace {
17std::string with_base(long long value, unsigned base, const char* prefix) {
18 const bool neg = value < 0;
19 auto u = neg ? static_cast<unsigned long long>(-(value + 1)) + 1ULL
20 : static_cast<unsigned long long>(value);
21 std::string digits;
22 const char* d = "0123456789abcdef";
23 if (u == 0) {
24 digits = "0";
25 }
26 while (u != 0) {
27 digits.push_back(d[u % base]);
28 u /= base;
29 }
30 std::reverse(digits.begin(), digits.end());
31 return (neg ? "-" : "") + std::string(prefix) + digits;
33} // namespace
35std::string hex(long long value) { return with_base(value, 16, "0x"); }
36std::string oct(long long value) { return with_base(value, 8, "0o"); }
37std::string bin(long long value) { return with_base(value, 2, "0b"); }
39std::string ascii(std::string_view s) {
40 std::string r = "'";
41 for (unsigned char c : s) {
42 if (c == '\\') {
43 r += "\\\\";
44 } else if (c == '\'') {
45 r += "\\'";
46 } else if (c >= 32 && c < 127) {
47 r += static_cast<char>(c);
48 } else {
49 std::ostringstream o;
50 o << "\\x" << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(c);
51 r += o.str();
52 }
53 }
54 r += "'";
55 return r;
58bool to_bool(std::string_view s) { return !s.empty(); }
59long long to_int(std::string_view s) { return std::stoll(std::string(s)); }
60long long to_int(double x) { return static_cast<long long>(x); }
61double to_float(std::string_view s) { return std::stod(std::string(s)); }
63std::size_t hash(std::string_view s) { return std::hash<std::string_view>{}(s); }
65} // namespace cheatah::builtins