From 0255edb8bed1e7493f03751bcdce0fb6fa0c1149 Mon Sep 17 00:00:00 2001 From: King_DuckZ Date: Fri, 22 Apr 2022 22:02:59 +0200 Subject: [PATCH] Update wren to latest and fix build --- include/wrenpp/vm.hpp | 3 ++- src/vm.cpp | 40 ++++++++++++++++++++++++++++++++++++---- subprojects/wren/wren | 2 +- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/include/wrenpp/vm.hpp b/include/wrenpp/vm.hpp index 9d16769..ea0b742 100644 --- a/include/wrenpp/vm.hpp +++ b/include/wrenpp/vm.hpp @@ -44,7 +44,7 @@ namespace wren { }; enum class SlotType { - Bool, Num, Foreign, List, Null, String, Unknown + Bool, Num, Foreign, List, Null, String, Unknown, Map }; namespace detail { @@ -56,6 +56,7 @@ namespace wren { char* (*load_module_fn)(Configuration&, VM*, const char*) {nullptr}; foreign_method_t (*foreign_method_fn)(Configuration&, VM*, const char*, const char*, bool, const char*) {nullptr}; foreign_class_t (*foreign_class_fn)(Configuration&, VM*, const char*, const char*) {nullptr}; + void (*load_module_complete_fn)(Configuration&, VM*, const char*); Configuration* config_obj {nullptr}; VM* owner {nullptr}; diff --git a/src/vm.cpp b/src/vm.cpp index feb9a73..7985ff0 100644 --- a/src/vm.cpp +++ b/src/vm.cpp @@ -34,6 +34,21 @@ namespace wren { }; } + void load_module_complete_fn (WrenVM* wvm, const char* name, struct WrenLoadModuleResult result); + + WrenLoadModuleResult to_wren_load_module_result ( + const char* source, + const detail::Callbacks& cb, + void* user_data + ) { + assert(cb.owner); + return ::WrenLoadModuleResult{ + .source = source, + .onComplete = (cb.load_module_complete_fn ? &load_module_complete_fn : nullptr), + .userData = user_data + }; + } + void write_fn (WrenVM* wvm, const char* text) { auto cb = static_cast(wrenGetUserData(wvm)); assert(cb); @@ -55,11 +70,19 @@ namespace wren { return cb->resolve_module_fn(*cb->config_obj, cb->owner, importer, name); } - char* load_module_fn (WrenVM* wvm, const char* name) { - auto cb = static_cast(wrenGetUserData(wvm)); + void* reallocate_fn (void* memory, size_t size, void* user_data) { + auto cb = static_cast(user_data); + assert(cb); + assert(cb->reallocate_fn); + return cb->reallocate_fn(memory, size); + } + + WrenLoadModuleResult load_module_fn (WrenVM* wvm, const char* name) { + const auto user_data = wrenGetUserData(wvm); + auto cb = static_cast(user_data); assert(cb); assert(cb->load_module_fn and cb->config_obj and cb->owner); - return cb->load_module_fn(*cb->config_obj, cb->owner, name); + return to_wren_load_module_result(cb->load_module_fn(*cb->config_obj, cb->owner, name), *cb, user_data); } WrenForeignMethodFn foreign_method_fn (WrenVM* wvm, const char* module, const char* class_name, bool is_static, const char* signature) { @@ -78,6 +101,14 @@ namespace wren { } } + void load_module_complete_fn (WrenVM* wvm, const char* name, struct WrenLoadModuleResult result) { + auto cb = static_cast(wrenGetUserData(wvm)); + assert(cb); + assert(cb->load_module_complete_fn and cb->config_obj and cb->owner); + + (*cb->load_module_complete_fn)(*cb->config_obj, cb->owner, name); + } + WrenForeignClassMethods foreign_class_fn (WrenVM* wvm, const char* module, const char* class_name) { auto cb = static_cast(wrenGetUserData(wvm)); assert(cb); @@ -260,7 +291,7 @@ namespace wren { wconf.errorFn = &error_fn; if (cb.reallocate_fn) - wconf.reallocateFn = cb.reallocate_fn; + wconf.reallocateFn = &reallocate_fn; if (cb.resolve_module_fn) wconf.resolveModuleFn = &resolve_module_fn; @@ -310,6 +341,7 @@ namespace wren { case WREN_TYPE_STRING: return SlotType::String; case WREN_TYPE_FOREIGN: return SlotType::Foreign; case WREN_TYPE_UNKNOWN: return SlotType::Unknown; + case WREN_TYPE_MAP: return SlotType::Map; }; assert(false); return SlotType::Unknown; diff --git a/subprojects/wren/wren b/subprojects/wren/wren index 4a18fc4..4ffe2ed 160000 --- a/subprojects/wren/wren +++ b/subprojects/wren/wren @@ -1 +1 @@ -Subproject commit 4a18fc489f9ea3d253b20dd40f4cdad0d6bb40eb +Subproject commit 4ffe2ed38b238ff410e70654cbe38883f7533d3f