67 lines
1.5 KiB
C++

#include "object.hh"
#include <string>
std::string Object::to_string() {
switch (type) {
case ObjectType::NIL:
return "nil";
case ObjectType::BOOL: {
bool val = std::get<bool>(value);
return (val ? "true" : "false");
}
case ObjectType::IDENTIFIER:
case ObjectType::STRING_LIT: {
std::string val = std::get<std::string>(value);
return val;
}
case ObjectType::NUMBER: {
double val = std::get<double>(value);
return std::to_string(val);
}
}
}
std::ostream &operator<<(std::ostream &os, const ObjectType &type) {
switch (type) {
case ObjectType::NIL:
os << "ObjectType::NIL";
break;
case ObjectType::BOOL:
os << "ObjectType::BOOL";
case ObjectType::IDENTIFIER:
os << "ObjectType::IDENTIFIER";
break;
case ObjectType::STRING_LIT:
os << "ObjectType::STRING_LIT";
break;
case ObjectType::NUMBER:
os << "ObjectType::NUMBER";
break;
}
return os;
}
std::ostream &operator<<(std::ostream &os, const Object &obj) {
os << "Object(" << obj.type;
switch (obj.type) {
case ObjectType::NIL:
break;
case ObjectType::BOOL:
os << ", " << std::to_string(std::get<bool>(obj.value));
break;
case ObjectType::IDENTIFIER:
case ObjectType::STRING_LIT:
os << ", " << std::get<std::string>(obj.value);
break;
case ObjectType::NUMBER:
os << ", " << std::get<double>(obj.value);
break;
}
os << ')';
return os;
}