Fix crash when user's foreign_method_fn() returns nil.
This commit is contained in:
parent
482410356d
commit
3a8285a518
1 changed files with 17 additions and 7 deletions
|
@ -67,10 +67,15 @@ namespace wren {
|
||||||
assert(cb);
|
assert(cb);
|
||||||
assert(cb->foreign_method_fn and cb->config_obj and cb->owner);
|
assert(cb->foreign_method_fn and cb->config_obj and cb->owner);
|
||||||
foreign_method_t func = cb->foreign_method_fn(*cb->config_obj, cb->owner, module, class_name, is_static, signature);
|
foreign_method_t func = cb->foreign_method_fn(*cb->config_obj, cb->owner, module, class_name, is_static, signature);
|
||||||
DynafuncMaker* const dfm = cb->dynafunc;
|
if (func) {
|
||||||
assert(dfm);
|
DynafuncMaker* const dfm = cb->dynafunc;
|
||||||
auto retval = reinterpret_cast<WrenForeignMethodFn>(dfm->make(cb->owner, func));
|
assert(dfm);
|
||||||
return retval;
|
auto retval = reinterpret_cast<WrenForeignMethodFn>(dfm->make(cb->owner, func));
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
||||||
|
@ -78,10 +83,15 @@ namespace wren {
|
||||||
assert(cb);
|
assert(cb);
|
||||||
assert(cb->foreign_class_fn and cb->config_obj and cb->owner);
|
assert(cb->foreign_class_fn and cb->config_obj and cb->owner);
|
||||||
foreign_class_t funcs = cb->foreign_class_fn(*cb->config_obj, cb->owner, module, class_name);
|
foreign_class_t funcs = cb->foreign_class_fn(*cb->config_obj, cb->owner, module, class_name);
|
||||||
DynafuncMaker* const dfm = cb->dynafunc;
|
|
||||||
assert(dfm);
|
|
||||||
WrenForeignClassMethods retval;
|
WrenForeignClassMethods retval;
|
||||||
retval.allocate = reinterpret_cast<WrenForeignMethodFn>(dfm->make(cb->owner, funcs.allocate));
|
if (funcs.allocate) {
|
||||||
|
DynafuncMaker* const dfm = cb->dynafunc;
|
||||||
|
assert(dfm);
|
||||||
|
retval.allocate = reinterpret_cast<WrenForeignMethodFn>(dfm->make(cb->owner, funcs.allocate));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
retval.allocate = nullptr;
|
||||||
|
}
|
||||||
retval.finalize = funcs.finalize;
|
retval.finalize = funcs.finalize;
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue