Modules/Objects/private/primitives/NullObject.cpp
2024-03-25 11:20:15 +03:00

50 lines
1.2 KiB
C++

#include "primitives/NullObject.hpp"
using namespace tp;
using namespace obj;
obj::NullObject* obj::NdoNull_globalInstance = nullptr;
bool uninit_flag = false;
void NullObject::uninit() {
uninit_flag = true;
objects_api::destroy(NdoNull_globalInstance);
NdoNull_globalInstance = nullptr;
}
void NullObject::destructor(Object* self) {
DEBUG_ASSERT(uninit_flag && "Only one the instance of NullObject exists and thus it can't be destroyed");
}
std::string to_string(NullObject* self) { return "nullptr"; }
alni to_int(NullObject* self) { return 0; }
alnf to_float(NullObject* self) { return 0; }
obj::TypeMethods* tm_construct() {
auto out = new obj::TypeMethods();
return out;
}
struct ObjectTypeConversions NullObjectTypeConversions = {
.from_int = nullptr,
.from_float = nullptr,
.from_string = nullptr,
.to_string = (object_to_string) to_string,
.to_int = (object_to_int) to_int,
.to_float = (object_to_float) to_float,
};
struct ObjectType NullObject::TypeData = {
.base = nullptr,
.constructor = nullptr,
.destructor = NullObject::destructor,
.copy = nullptr,
.size = sizeof(NullObject),
.name = "null",
.conversions = &NullObjectTypeConversions,
};