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.
This commit is contained in:
parent
31ba3af348
commit
a63a8c33d8
1 changed files with 12 additions and 0 deletions
|
@ -24,6 +24,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
namespace wren {
|
namespace wren {
|
||||||
typedef std::tuple<const char*, const char*> ModuleAndName;
|
typedef std::tuple<const char*, const char*> ModuleAndName;
|
||||||
|
@ -63,6 +64,9 @@ namespace wren {
|
||||||
template <typename T>
|
template <typename T>
|
||||||
foreign_class_t make_foreign_class();
|
foreign_class_t make_foreign_class();
|
||||||
|
|
||||||
|
template <typename T, typename... Args>
|
||||||
|
T* make_foreign_object(VM& vm, const ModuleAndName& mn, Args&&... args);
|
||||||
|
|
||||||
template <auto V>
|
template <auto V>
|
||||||
foreign_method_t make_method_bindable();
|
foreign_method_t make_method_bindable();
|
||||||
|
|
||||||
|
@ -303,6 +307,14 @@ namespace wren {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T, typename... Args>
|
||||||
|
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>(args)...};
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
template <auto V>
|
template <auto V>
|
||||||
inline foreign_method_t make_method_bindable() {
|
inline foreign_method_t make_method_bindable() {
|
||||||
return detail::MakeMethodBindable<V>::make();
|
return detail::MakeMethodBindable<V>::make();
|
||||||
|
|
Loading…
Reference in a new issue