Update wren to latest and fix build
This commit is contained in:
parent
b4383e9449
commit
0255edb8be
3 changed files with 39 additions and 6 deletions
|
@ -44,7 +44,7 @@ namespace wren {
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class SlotType {
|
enum class SlotType {
|
||||||
Bool, Num, Foreign, List, Null, String, Unknown
|
Bool, Num, Foreign, List, Null, String, Unknown, Map
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
|
@ -56,6 +56,7 @@ namespace wren {
|
||||||
char* (*load_module_fn)(Configuration&, VM*, const char*) {nullptr};
|
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_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};
|
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};
|
Configuration* config_obj {nullptr};
|
||||||
VM* owner {nullptr};
|
VM* owner {nullptr};
|
||||||
|
|
40
src/vm.cpp
40
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) {
|
void write_fn (WrenVM* wvm, const char* text) {
|
||||||
auto cb = static_cast<detail::Callbacks*>(wrenGetUserData(wvm));
|
auto cb = static_cast<detail::Callbacks*>(wrenGetUserData(wvm));
|
||||||
assert(cb);
|
assert(cb);
|
||||||
|
@ -55,11 +70,19 @@ namespace wren {
|
||||||
return cb->resolve_module_fn(*cb->config_obj, cb->owner, importer, name);
|
return cb->resolve_module_fn(*cb->config_obj, cb->owner, importer, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* load_module_fn (WrenVM* wvm, const char* name) {
|
void* reallocate_fn (void* memory, size_t size, void* user_data) {
|
||||||
auto cb = static_cast<detail::Callbacks*>(wrenGetUserData(wvm));
|
auto cb = static_cast<detail::Callbacks*>(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<detail::Callbacks*>(user_data);
|
||||||
assert(cb);
|
assert(cb);
|
||||||
assert(cb->load_module_fn and cb->config_obj and cb->owner);
|
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) {
|
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<detail::Callbacks*>(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) {
|
WrenForeignClassMethods foreign_class_fn (WrenVM* wvm, const char* module, const char* class_name) {
|
||||||
auto cb = static_cast<detail::Callbacks*>(wrenGetUserData(wvm));
|
auto cb = static_cast<detail::Callbacks*>(wrenGetUserData(wvm));
|
||||||
assert(cb);
|
assert(cb);
|
||||||
|
@ -260,7 +291,7 @@ namespace wren {
|
||||||
wconf.errorFn = &error_fn;
|
wconf.errorFn = &error_fn;
|
||||||
|
|
||||||
if (cb.reallocate_fn)
|
if (cb.reallocate_fn)
|
||||||
wconf.reallocateFn = cb.reallocate_fn;
|
wconf.reallocateFn = &reallocate_fn;
|
||||||
|
|
||||||
if (cb.resolve_module_fn)
|
if (cb.resolve_module_fn)
|
||||||
wconf.resolveModuleFn = &resolve_module_fn;
|
wconf.resolveModuleFn = &resolve_module_fn;
|
||||||
|
@ -310,6 +341,7 @@ namespace wren {
|
||||||
case WREN_TYPE_STRING: return SlotType::String;
|
case WREN_TYPE_STRING: return SlotType::String;
|
||||||
case WREN_TYPE_FOREIGN: return SlotType::Foreign;
|
case WREN_TYPE_FOREIGN: return SlotType::Foreign;
|
||||||
case WREN_TYPE_UNKNOWN: return SlotType::Unknown;
|
case WREN_TYPE_UNKNOWN: return SlotType::Unknown;
|
||||||
|
case WREN_TYPE_MAP: return SlotType::Map;
|
||||||
};
|
};
|
||||||
assert(false);
|
assert(false);
|
||||||
return SlotType::Unknown;
|
return SlotType::Unknown;
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 4a18fc489f9ea3d253b20dd40f4cdad0d6bb40eb
|
Subproject commit 4ffe2ed38b238ff410e70654cbe38883f7533d3f
|
Loading…
Reference in a new issue