From d6b7e33e328c2d5d0ea183edb61bcfc4c21af5be Mon Sep 17 00:00:00 2001 From: PossiblyAShrub Date: Thu, 24 Dec 2020 12:46:59 -0800 Subject: [PATCH 1/2] update default reallocateFn and loadModuleFn to match new wren 0.4.0 signatures --- include/wrenbind17/vm.hpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/include/wrenbind17/vm.hpp b/include/wrenbind17/vm.hpp index 64dcbdf..28838a2 100644 --- a/include/wrenbind17/vm.hpp +++ b/include/wrenbind17/vm.hpp @@ -75,27 +75,29 @@ namespace wrenbind17 { data->config.minHeapSize = minHeap; data->config.heapGrowthPercent = heapGrowth; data->config.userData = data.get(); - data->config.reallocateFn = std::realloc; - data->config.loadModuleFn = [](WrenVM* vm, const char* name) -> char* { + data->config.reallocateFn = [](void* memory, size_t newSize, void* userData) -> void* { return std::realloc(memory, newSize); }; + data->config.loadModuleFn = [](WrenVM* vm, const char* name) -> WrenLoadModuleResult { + auto res = WrenLoadModuleResult(); auto& self = *reinterpret_cast(wrenGetUserData(vm)); const auto mod = self.modules.find(name); if (mod != self.modules.end()) { auto source = mod->second.str(); - auto buffer = new char[source.size() + 1]; - std::memcpy(buffer, &source[0], source.size() + 1); - return buffer; + char* buffer = new char[source.size() + 1]; + std::memcpy(static_cast(buffer), &source[0], source.size() + 1); + res.source = buffer; + return res; } try { auto source = self.loadFileFn(self.paths, std::string(name)); - auto buffer = new char[source.size() + 1]; - std::memcpy(buffer, &source[0], source.size() + 1); - return buffer; + char* buffer = new char[source.size() + 1]; + std::memcpy(static_cast(buffer), &source[0], source.size() + 1); + res.source = buffer; } catch (std::exception& e) { (void)e; - return nullptr; } + return res; }; data->config.bindForeignMethodFn = [](WrenVM* vm, const char* module, const char* className, const bool isStatic, const char* signature) -> WrenForeignMethodFn { From 94b1d0ae46ad84f3d82d55de9840d51a3f91bb96 Mon Sep 17 00:00:00 2001 From: PossiblyAShrub Date: Sun, 27 Dec 2020 13:25:25 -0800 Subject: [PATCH 2/2] Add >=0.4.0 version check --- include/wrenbind17/vm.hpp | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/include/wrenbind17/vm.hpp b/include/wrenbind17/vm.hpp index 28838a2..e09f3ad 100644 --- a/include/wrenbind17/vm.hpp +++ b/include/wrenbind17/vm.hpp @@ -75,6 +75,7 @@ namespace wrenbind17 { data->config.minHeapSize = minHeap; data->config.heapGrowthPercent = heapGrowth; data->config.userData = data.get(); +#if WREN_VERSION_NUMBER >= 4000 // >= 0.4.0 data->config.reallocateFn = [](void* memory, size_t newSize, void* userData) -> void* { return std::realloc(memory, newSize); }; data->config.loadModuleFn = [](WrenVM* vm, const char* name) -> WrenLoadModuleResult { auto res = WrenLoadModuleResult(); @@ -83,22 +84,46 @@ namespace wrenbind17 { const auto mod = self.modules.find(name); if (mod != self.modules.end()) { auto source = mod->second.str(); - char* buffer = new char[source.size() + 1]; - std::memcpy(static_cast(buffer), &source[0], source.size() + 1); + auto buffer = new char[source.size() + 1]; + std::memcpy(buffer, &source[0], source.size() + 1); res.source = buffer; return res; } try { auto source = self.loadFileFn(self.paths, std::string(name)); - char* buffer = new char[source.size() + 1]; - std::memcpy(static_cast(buffer), &source[0], source.size() + 1); + auto buffer = new char[source.size() + 1]; + std::memcpy(buffer, &source[0], source.size() + 1); res.source = buffer; } catch (std::exception& e) { (void)e; } return res; }; +#else // < 0.4.0 + data->config.reallocateFn = std::realloc; + data->config.loadModuleFn = [](WrenVM* vm, const char* name) -> char* { + auto& self = *reinterpret_cast(wrenGetUserData(vm)); + + const auto mod = self.modules.find(name); + if (mod != self.modules.end()) { + auto source = mod->second.str(); + auto buffer = new char[source.size() + 1]; + std::memcpy(buffer, &source[0], source.size() + 1); + return buffer; + } + + try { + auto source = self.loadFileFn(self.paths, std::string(name)); + auto buffer = new char[source.size() + 1]; + std::memcpy(buffer, &source[0], source.size() + 1); + return buffer; + } catch (std::exception& e) { + (void)e; + return nullptr; + } + }; +#endif // WREN_VERSION_NUMBER >= 4000 data->config.bindForeignMethodFn = [](WrenVM* vm, const char* module, const char* className, const bool isStatic, const char* signature) -> WrenForeignMethodFn { auto& self = *reinterpret_cast(wrenGetUserData(vm));