45 lines
1.3 KiB
C++
45 lines
1.3 KiB
C++
#include "value.hh"
|
|
|
|
#include "../common/overloaded.hh"
|
|
|
|
namespace tyche::vm {
|
|
|
|
std::string type_name(Type type)
|
|
{
|
|
switch (type) {
|
|
case Type::Nil: return "nil";
|
|
case Type::Integer: return "integer";
|
|
case Type::Float: return "float";
|
|
case Type::String: return "string";
|
|
case Type::Array: return "array";
|
|
case Type::Table: return "table";
|
|
case Type::Function: return "function";
|
|
case Type::NativePointer: return "native pointer";
|
|
case Type::COUNT: default: return "???";
|
|
}
|
|
}
|
|
|
|
Type Value::type() const
|
|
{
|
|
return std::visit(overloaded {
|
|
[](std::monostate) { return Type::Nil; },
|
|
[](int32_t) { return Type::Integer; },
|
|
[](float) { return Type::Float; },
|
|
[](std::string const&) { return Type::String; },
|
|
[](Function const&) { return Type::Function; },
|
|
}, value_);
|
|
}
|
|
|
|
std::string Value::to_string() const
|
|
{
|
|
return std::visit(overloaded {
|
|
[](std::monostate) { return std::string("nil"); },
|
|
[](int32_t i) { return std::to_string(i); },
|
|
[](float f) { return std::to_string(f); },
|
|
[](std::string const& s) { return s; },
|
|
[](Function const& f) { return "@" + std::to_string(f.f_id); }
|
|
}, value_);
|
|
}
|
|
|
|
}
|