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>9
namespace cheatah::builtins {11
std::size_t len(std::string_view s) { return s.size(); }13
int ord(std::string_view s) { return s.empty() ? 0 : static_cast<unsigned char>(s[0]); }14
std::string chr(int codepoint) { return std::string(1, static_cast<char>(codepoint)); }16
namespace {17
std::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)) + 1ULL20
: 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;32
}33
} // namespace35
std::string hex(long long value) { return with_base(value, 16, "0x"); }36
std::string oct(long long value) { return with_base(value, 8, "0o"); }37
std::string bin(long long value) { return with_base(value, 2, "0b"); }39
std::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;56
}58
bool to_bool(std::string_view s) { return !s.empty(); }59
long long to_int(std::string_view s) { return std::stoll(std::string(s)); }60
long long to_int(double x) { return static_cast<long long>(x); }61
double to_float(std::string_view s) { return std::stod(std::string(s)); }63
std::size_t hash(std::string_view s) { return std::hash<std::string_view>{}(s); }65
} // namespace cheatah::builtins