Method object refactor

This commit is contained in:
IlyaShurupov 2024-03-25 13:57:31 +03:00
parent add66e6cac
commit 7332e72bb2
25 changed files with 420 additions and 529 deletions

View file

@ -32,8 +32,6 @@ namespace tp::obj {
Map<std::string, const ObjectType*> types;
TypeGroups type_groups;
Interpreter* interp = nullptr;
save_load_callbacks* sl_callbacks[SAVE_LOAD_MAX_CALLBACK_SLOTS]{};
alni sl_callbacks_load_idx = 0;
struct NullObject* nullObject = nullptr;
@ -67,8 +65,6 @@ namespace tp::obj {
static inline void setReferenceCount(Object* in, halni count) { in->references = count; }
static void add_sl_callbacks(save_load_callbacks*);
static alni objsize_file(Object* self);
static alni objsize_file_recursive(Object* self);

View file

@ -54,20 +54,4 @@ namespace tp::obj {
void save_string(ArchiverOut& file, const std::string& string);
ualni save_string_size(const std::string& string);
void load_string(ArchiverIn& file, std::string& out);
#define SAVE_LOAD_MAX_CALLBACK_SLOTS 100
typedef void(pre_save_callback)(void* self, ArchiverOut&);
typedef void(pre_load_callback)(void* self, ArchiverIn&);
typedef void(post_save_callback)(void* self, ArchiverOut&);
typedef void(post_load_callback)(void* self, ArchiverIn&);
typedef alni(slcb_size_callback)(void* self, ArchiverOut&);
struct save_load_callbacks {
void* self;
pre_save_callback* pre_save;
slcb_size_callback* size;
pre_load_callback* pre_load;
post_save_callback* post_save;
post_load_callback* post_load;
};
}

View file

@ -1,36 +0,0 @@
#pragma once
#include "primitives/MethodObject.hpp"
#include "List.hpp"
namespace tp::obj {
// global singleton API for method object to manage the script
struct ScriptSection {
List<Script*> mScripts;
Script* createScript();
void changeScript(Script** current_script, Script** new_script);
void abandonScript(Script* script);
alni get_script_file_adress(Script* in);
Script* get_scritp_from_file_adress(alni file_adress);
~ScriptSection();
static void initialize();
static void uninitialize();
static ScriptSection* globalHandle();
private:
static obj::save_load_callbacks slcb_script_section;
void delete_script(Script* script);
void reference_script(Script* script);
static void save_script_table_to_file(ScriptSection* self, ArchiverOut& file);
static void load_script_table_from_file(ScriptSection* self, ArchiverIn& file);
static alni save_script_table_to_file_size(ScriptSection* self, ArchiverOut& file);
};
}

View file

@ -19,6 +19,12 @@ namespace tp::obj {
ualni mInstructionIdx = 0;
ualni mArgumentsLoaded = 0;
void updateRefCount() {
for (auto const_obj : mConstants) {
objects_api::setReferenceCount(const_obj.data(), 1);
}
}
~ByteCode() {
for (auto const_obj : mConstants) {
objects_api::destroy(const_obj.data());

View file

@ -0,0 +1,23 @@
#pragma once
#include "primitives/StringObject.hpp"
#include "interpreter/ByteCode.hpp"
namespace tp::obj {
struct BytecodeObject : Object {
static ObjectType TypeData;
StringObject* mReadable;
ByteCode mBytecode;
static void constructor(BytecodeObject* self);
static void copy(BytecodeObject* self, BytecodeObject* in);
static void destructor(BytecodeObject* self);
static alni save_size(BytecodeObject* self);
static void save(BytecodeObject* self, ArchiverOut& file_self);
static void load(ArchiverIn& file_self, BytecodeObject* self);
};
}

View file

@ -1,7 +1,6 @@
#pragma once
#include "primitives/StringObject.hpp"
#include "interpreter/Script.hpp"
#include "primitives/BytecodeObject.hpp"
namespace tp::obj {
@ -9,7 +8,7 @@ namespace tp::obj {
static ObjectType TypeData;
Script* mScript;
BytecodeObject* mBytecodeLink;
static void constructor(MethodObject* self);
static void copy(MethodObject* self, MethodObject* in);

View file

@ -9,7 +9,4 @@ namespace tp::obj {
static ObjectType TypeData;
};
#define NDO_NULL objects_api::getNull()
#define NDO_NULL_REF objects_api::getNullReferenced()
}