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