99666495e7
Refs: #12
35 lines
1.0 KiB
C++
35 lines
1.0 KiB
C++
#include "furvm/module.hpp"
|
|
|
|
#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
|