refactor(furvm): improve serialization

Refs: #12
This commit is contained in:
2026-06-19 15:14:25 +02:00
parent 6f023765b5
commit 99666495e7
7 changed files with 113 additions and 122 deletions
+32 -1
View File
@@ -1,3 +1,34 @@
#include "furvm/module.hpp"
namespace furvm {}
#include "furvm/detail/serialization.hpp"
#include "furvm/fwd.hpp"
#include <ios>
namespace furvm {
std::ostream& mod::serialize(std::ostream& os) const {
os << MAGIC;
detail::serialize(os, std::uint32_t(0)); // version
detail::serialize(os, function_id(m_functionMap.size()));
for (const auto& [name, id] : m_functionMap) {
detail::serialize(os, name);
function_h func = m_functions.at(id);
detail::serialize(os, std::uint8_t(func->type()));
switch (func->type()) {
case function_t::Normal: {
detail::serialize(os, func->position());
} break;
case function_t::Native: break;
case function_t::Import: {
detail::serialize(os, func->imp().mod);
detail::serialize(os, func->imp().function);
} break;
}
}
detail::serialize(os, std::uint64_t(m_bytecode.size()));
return os.write(reinterpret_cast<const char*>(m_bytecode.data()), static_cast<std::streamsize>(m_bytecode.size()));
}
} // namespace furvm