New helper function for abort_fiber + message

This commit is contained in:
King_DuckZ 2022-05-25 11:56:13 +02:00
parent b559f025e9
commit 616381516b
3 changed files with 12 additions and 7 deletions

View file

@ -143,14 +143,14 @@ namespace wren {
const auto result = detail::ForeignClassHelper<T, Args...>::construct(vm, vm.slot_count() - 1, mem); const auto result = detail::ForeignClassHelper<T, Args...>::construct(vm, vm.slot_count() - 1, mem);
if (not result.success) { if (not result.success) {
set(vm, 1, std::string{"No registered c++ constructor "} + abort_fiber_with_error(vm, 1,
std::string{"No registered c++ constructor "} +
#if defined(WRENPP_WITH_NAME_GUESSING) #if defined(WRENPP_WITH_NAME_GUESSING)
"for class " + guess_class_name<T>() + " " + "for class " + guess_class_name<T>() + " " +
#endif #endif
"takes " + std::to_string(result.parameter_count) + "takes " + std::to_string(result.parameter_count) +
" parameter" + (result.parameter_count == 1 ? "" : "s") " parameter" + (result.parameter_count == 1 ? "" : "s")
); );
vm.abort_fiber(1);
} }
}; };
ret.finalize = [](void* mem) { ret.finalize = [](void* mem) {

View file

@ -58,6 +58,7 @@ namespace wren {
void variable(VM& vm, const Handle& handle, int slot); void variable(VM& vm, const Handle& handle, int slot);
void variable_ensure_slot(VM& vm, ModuleAndName mod_and_name, int slot); void variable_ensure_slot(VM& vm, ModuleAndName mod_and_name, int slot);
void variable_ensure_slot(VM& vm, const Handle& handle, int slot); void variable_ensure_slot(VM& vm, const Handle& handle, int slot);
void abort_fiber_with_error (VM& vm, int slot, std::string_view message);
namespace detail { namespace detail {
template <typename T> template <typename T>
@ -225,8 +226,7 @@ namespace wren {
return obj; return obj;
} }
catch (const std::runtime_error& err) { catch (const std::runtime_error& err) {
set(vm, 1, err.what()); abort_fiber_with_error(vm, 1, err.what());
vm.abort_fiber(1);
return nullptr; return nullptr;
} }
} }

View file

@ -89,4 +89,9 @@ namespace wren {
vm.ensure_slots(1); vm.ensure_slots(1);
variable(vm, handle, slot); variable(vm, handle, slot);
} }
void abort_fiber_with_error (VM& vm, int slot, std::string_view message) {
set(vm, slot, message);
vm.abort_fiber(slot);
}
} //namespace wren } //namespace wren