Method object refactor
This commit is contained in:
parent
714bdaef12
commit
715175085e
25 changed files with 420 additions and 529 deletions
74
Objects/private/primitives/BytecodeObject.cpp
Normal file
74
Objects/private/primitives/BytecodeObject.cpp
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
|
||||
#include "primitives/BytecodeObject.hpp"
|
||||
|
||||
using namespace tp;
|
||||
using namespace obj;
|
||||
|
||||
void BytecodeObject::constructor(BytecodeObject* self) {
|
||||
new (&self->mBytecode) ByteCode();
|
||||
self->mReadable = objects_api::create<StringObject>();
|
||||
}
|
||||
|
||||
void BytecodeObject::copy(BytecodeObject* self, BytecodeObject* in) {
|
||||
// TODO : implement
|
||||
ASSERT(!"can not copy bytecode object")
|
||||
}
|
||||
|
||||
void BytecodeObject::destructor(BytecodeObject* self) {
|
||||
self->mBytecode.~ByteCode();
|
||||
objects_api::destroy(self->mReadable);
|
||||
}
|
||||
|
||||
tp::alni BytecodeObject::save_size(BytecodeObject* self) {
|
||||
alni out = sizeof(alni); // string object
|
||||
out += sizeof(alni); // constants size
|
||||
out += self->mBytecode.mConstants.size() * sizeof(alni); // constant objects
|
||||
out += SaveSizeCounter::calc(self->mBytecode.mInstructions);
|
||||
return out;
|
||||
}
|
||||
|
||||
void BytecodeObject::save(BytecodeObject* self, ArchiverOut& file) {
|
||||
file << (alni) objects_api::save(file, self->mReadable);
|
||||
file << (alni) self->mBytecode.mConstants.size();
|
||||
|
||||
for (auto const_obj : self->mBytecode.mConstants) {
|
||||
file << (alni) objects_api::save(file, const_obj.data());
|
||||
}
|
||||
|
||||
// mInstructions
|
||||
file << self->mBytecode.mInstructions;
|
||||
}
|
||||
|
||||
void BytecodeObject::load(ArchiverIn& file, obj::BytecodeObject* self) {
|
||||
new (&self->mBytecode) ByteCode();
|
||||
|
||||
alni stringObjectAddress;
|
||||
file >> stringObjectAddress;
|
||||
self->mReadable = objects_api::cast<StringObject>(objects_api::load(file, stringObjectAddress));
|
||||
|
||||
alni consts_count;
|
||||
file >> consts_count;
|
||||
|
||||
self->mBytecode.mConstants.reserve(consts_count);
|
||||
|
||||
for (auto const_obj : self->mBytecode.mConstants) {
|
||||
alni consts_addr;
|
||||
file >> consts_addr;
|
||||
const_obj.data() = objects_api::load(file, consts_addr);
|
||||
}
|
||||
|
||||
file >> self->mBytecode.mInstructions;
|
||||
}
|
||||
|
||||
struct ObjectType BytecodeObject::TypeData = {
|
||||
.base = nullptr,
|
||||
.constructor = (object_constructor) BytecodeObject::constructor,
|
||||
.destructor = (object_destructor) BytecodeObject::destructor,
|
||||
.copy = (object_copy) BytecodeObject::copy,
|
||||
.size = sizeof(BytecodeObject),
|
||||
.name = "bytecode",
|
||||
.conversions = nullptr,
|
||||
.save_size = (object_save_size) BytecodeObject::save_size,
|
||||
.save = (object_save) BytecodeObject::save,
|
||||
.load = (object_load) BytecodeObject::load,
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue