diff --git a/include/xsk/arc/assembler.hpp b/include/xsk/arc/assembler.hpp index af215ebb..dfd9bdf3 100644 --- a/include/xsk/arc/assembler.hpp +++ b/include/xsk/arc/assembler.hpp @@ -26,8 +26,7 @@ class assembler public: assembler(context const* ctx); - auto assemble(assembly const& data, std::string const& name = {}) -> buffer; - auto get_dev_map() -> buffer; + auto assemble(assembly const& data, std::string const& name = {}) -> std::pair; private: auto assemble_function(function& func) -> void; diff --git a/include/xsk/gsc/assembler.hpp b/include/xsk/gsc/assembler.hpp index 1cd5e62a..4eaa8bec 100644 --- a/include/xsk/gsc/assembler.hpp +++ b/include/xsk/gsc/assembler.hpp @@ -22,8 +22,7 @@ class assembler public: assembler(context const* ctx); - auto assemble(assembly const& data) -> std::pair; - auto get_dev_map() -> buffer; + auto assemble(assembly const& data) -> std::tuple; private: auto assemble_function(function const& func) -> void; diff --git a/src/arc/assembler.cpp b/src/arc/assembler.cpp index f88d9e67..27ef4150 100644 --- a/src/arc/assembler.cpp +++ b/src/arc/assembler.cpp @@ -14,7 +14,7 @@ assembler::assembler(context const* ctx) : ctx_{ ctx }, script_{ ctx->endian() = { } -auto assembler::assemble(assembly const& data, std::string const& name) -> buffer +auto assembler::assemble(assembly const& data, std::string const& name) -> std::pair { assembly_ = &data; script_.clear(); @@ -224,12 +224,7 @@ auto assembler::assemble(assembly const& data, std::string const& name) -> buffe script_.write(head.flags); script_.pos(endpos); - return buffer{ script_.data(), script_.pos() }; -} - -auto assembler::get_dev_map() -> buffer -{ - return buffer{ dev_map_.data(), dev_map_.pos() }; + return { buffer{ script_.data(), script_.pos() }, buffer{ dev_map_.data(), dev_map_.pos() } }; } auto assembler::assemble_function(function& func) -> void diff --git a/src/arc/compiler.cpp b/src/arc/compiler.cpp index 4aa4b0c9..10880e61 100644 --- a/src/arc/compiler.cpp +++ b/src/arc/compiler.cpp @@ -33,6 +33,7 @@ auto compiler::emit_program(program const& prog) -> void developer_thread_ = false; animtree_ = {}; index_ = 0; + debug_pos_ = {}; for (auto const& include : prog.includes) { diff --git a/src/gsc/assembler.cpp b/src/gsc/assembler.cpp index eccba686..bd19fa99 100644 --- a/src/gsc/assembler.cpp +++ b/src/gsc/assembler.cpp @@ -14,7 +14,7 @@ assembler::assembler(context const* ctx) : ctx_{ ctx }, script_{ ctx->endian() = { } -auto assembler::assemble(assembly const& data) -> std::pair +auto assembler::assemble(assembly const& data) -> std::tuple { assembly_ = &data; script_.clear(); @@ -28,12 +28,7 @@ auto assembler::assemble(assembly const& data) -> std::pair assemble_function(*func); } - return { buffer{ script_.data(), script_.pos() }, buffer{ stack_.data(), stack_.pos() } }; -} - -auto assembler::get_dev_map() -> buffer -{ - return buffer{ dev_map_.data(), dev_map_.pos() }; + return { buffer{ script_.data(), script_.pos() }, buffer{ stack_.data(), stack_.pos() }, buffer{ dev_map_.data(), dev_map_.pos() } }; } auto assembler::assemble_function(function const& func) -> void diff --git a/src/gsc/compiler.cpp b/src/gsc/compiler.cpp index a0cb753f..ba2e88fb 100644 --- a/src/gsc/compiler.cpp +++ b/src/gsc/compiler.cpp @@ -35,6 +35,7 @@ auto compiler::emit_program(program const& prog) -> void animload_ = false; animname_ = {}; index_ = 1; + debug_pos_ = {}; ctx_->init_includes(); diff --git a/src/tool/main.cpp b/src/tool/main.cpp index bbe45d5a..29f42f70 100644 --- a/src/tool/main.cpp +++ b/src/tool/main.cpp @@ -167,8 +167,8 @@ auto assemble_file(game game, mach mach, fs::path file, fs::path rel) -> void if (zonetool) { auto path = fs::path{ "assembled" } / rel; - utils::file::save(path, outbin.first.data, outbin.first.size); - utils::file::save(path.replace_extension(".cgsc.stack"), outbin.second.data, outbin.second.size); + utils::file::save(path, std::get<0>(outbin).data, std::get<0>(outbin).size); + utils::file::save(path.replace_extension(".cgsc.stack"), std::get<1>(outbin).data, std::get<1>(outbin).size); std::cout << fmt::format("assembled {}\n", rel.generic_string()); } else @@ -176,14 +176,14 @@ auto assemble_file(game game, mach mach, fs::path file, fs::path rel) -> void asset script; script.name = "GSC"s; - script.bytecode.resize(outbin.first.size); - std::memcpy(script.bytecode.data(), outbin.first.data, script.bytecode.size()); + script.bytecode.resize(std::get<0>(outbin).size); + std::memcpy(script.bytecode.data(), std::get<0>(outbin).data, script.bytecode.size()); - script.buffer.resize(outbin.second.size); - std::memcpy(script.buffer.data(), outbin.second.data, script.buffer.size()); + script.buffer.resize(std::get<1>(outbin).size); + std::memcpy(script.buffer.data(), std::get<1>(outbin).data, script.buffer.size()); script.buffer = utils::zlib::compress(script.buffer); - script.len = static_cast(outbin.second.size); + script.len = static_cast(std::get<1>(outbin).size); script.compressedLen = static_cast(script.buffer.size()); script.bytecodeLen = static_cast(script.bytecode.size()); @@ -263,8 +263,8 @@ auto compile_file(game game, mach mach, fs::path file, fs::path rel) -> void if (zonetool) { auto path = fs::path{ "compiled" } / rel; - utils::file::save(path, outbin.first.data, outbin.first.size); - utils::file::save(path.replace_extension(".cgsc.stack"), outbin.second.data, outbin.second.size); + utils::file::save(path, std::get<0>(outbin).data, std::get<0>(outbin).size); + utils::file::save(path.replace_extension(".cgsc.stack"), std::get<1>(outbin).data, std::get<1>(outbin).size); std::cout << fmt::format("compiled {}\n", rel.generic_string()); } else @@ -272,14 +272,14 @@ auto compile_file(game game, mach mach, fs::path file, fs::path rel) -> void asset script; script.name = "GSC"s; - script.bytecode.resize(outbin.first.size); - std::memcpy(script.bytecode.data(), outbin.first.data, script.bytecode.size()); + script.bytecode.resize(std::get<0>(outbin).size); + std::memcpy(script.bytecode.data(), std::get<0>(outbin).data, script.bytecode.size()); - script.buffer.resize(outbin.second.size); - std::memcpy(script.buffer.data(), outbin.second.data, script.buffer.size()); + script.buffer.resize(std::get<1>(outbin).size); + std::memcpy(script.buffer.data(), std::get<1>(outbin).data, script.buffer.size()); script.buffer = utils::zlib::compress(script.buffer); - script.len = static_cast(outbin.second.size); + script.len = static_cast(std::get<1>(outbin).size); script.compressedLen = static_cast(script.buffer.size()); script.bytecodeLen = static_cast(script.bytecode.size()); @@ -287,10 +287,9 @@ auto compile_file(game game, mach mach, fs::path file, fs::path rel) -> void utils::file::save(fs::path{ "compiled" } / rel, result); std::cout << fmt::format("compiled {}\n", rel.generic_string()); - auto dev_map = contexts[game][mach]->assembler().get_dev_map(); - if (dev_map.size > 0) + if (std::get<2>(outbin).size > 0) { - utils::file::save(fs::path{ "compiled" } / fs::path{ "developer_maps" } / rel, dev_map.data, dev_map.size); + utils::file::save(fs::path{ "compiled" } / fs::path{ "developer_maps" } / rel, std::get<2>(outbin).data, std::get<2>(outbin).size); std::cout << fmt::format("wrote developer map {}\n", rel.generic_string()); } } @@ -711,7 +710,7 @@ void assemble_file(game game, mach mach, fs::path const& file, fs::path rel) auto outasm = contexts[game][mach]->source().parse_assembly(data); auto outbin = contexts[game][mach]->assembler().assemble(*outasm); - utils::file::save(fs::path{ "assembled" } / rel, outbin.data, outbin.size); + utils::file::save(fs::path{ "assembled" } / rel, outbin.first.data, outbin.first.size); std::cout << fmt::format("assembled {}\n", rel.generic_string()); } catch (std::exception const& e) @@ -758,13 +757,12 @@ void compile_file(game game, mach mach, fs::path const& file, fs::path rel) auto outasm = contexts[game][mach]->compiler().compile(file.string(), data); auto outbin = contexts[game][mach]->assembler().assemble(*outasm); - utils::file::save(fs::path{ "compiled" } / rel, outbin.data, outbin.size); + utils::file::save(fs::path{ "compiled" } / rel, outbin.first.data, outbin.first.size); std::cout << fmt::format("compiled {}\n", rel.generic_string()); - auto dev_map = contexts[game][mach]->assembler().get_dev_map(); - if (dev_map.size > 0) + if (outbin.second.size > 0) { - utils::file::save(fs::path{ "compiled" } / fs::path{ "developer_maps" } / rel, dev_map.data, dev_map.size); + utils::file::save(fs::path{ "compiled" } / fs::path{ "developer_maps" } / rel, outbin.second.data, outbin.second.size); std::cout << fmt::format("wrote developer map {}\n", rel.generic_string()); } }