From a63a8c33d80d70f9f77b606ca8ff73b436fff0cc Mon Sep 17 00:00:00 2001 From: King_DuckZ Date: Fri, 29 Apr 2022 02:08:23 +0200 Subject: [PATCH] Add make_foreign_object() function. It creates an instance of the given foreign class and returns a pointer to it. The wren object is stored in slot 0. --- include/wrenpp/vm_fun.hpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/include/wrenpp/vm_fun.hpp b/include/wrenpp/vm_fun.hpp index 5c21f8f..cc2b908 100644 --- a/include/wrenpp/vm_fun.hpp +++ b/include/wrenpp/vm_fun.hpp @@ -24,6 +24,7 @@ #include #include #include +#include namespace wren { typedef std::tuple ModuleAndName; @@ -63,6 +64,9 @@ namespace wren { template foreign_class_t make_foreign_class(); + template + T* make_foreign_object(VM& vm, const ModuleAndName& mn, Args&&... args); + template foreign_method_t make_method_bindable(); @@ -303,6 +307,14 @@ namespace wren { return ret; } + template + inline T* make_foreign_object(VM& vm, const ModuleAndName& mn, Args&&... args) { + variable(vm, mn, 0); + void* const mem = vm.set_slot_new_foreign(0, 0, sizeof(T)); + T* const obj = new(mem) T{std::forward(args)...}; + return obj; + } + template inline foreign_method_t make_method_bindable() { return detail::MakeMethodBindable::make();