From e82cad5b2536aa186ef7bb964eb11cf58bc924d7 Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Sat, 2 Mar 2024 04:22:53 +0800 Subject: [PATCH] some fix --- include/pocketpy/cffi.h | 8 -------- include/pocketpy/linalg.h | 6 ------ include/pocketpy/obj.h | 1 + include/pocketpy/vm.h | 2 ++ src/cffi.cpp | 4 ++++ 5 files changed, 7 insertions(+), 14 deletions(-) diff --git a/include/pocketpy/cffi.h b/include/pocketpy/cffi.h index d607ae4c..851cb77b 100644 --- a/include/pocketpy/cffi.h +++ b/include/pocketpy/cffi.h @@ -46,14 +46,6 @@ struct VoidP{ static void _register(VM* vm, PyObject* mod, PyObject* type); }; -inline PyObject* py_var(VM* vm, void* p){ - return VAR_T(VoidP, p); -} - -inline PyObject* py_var(VM* vm, const void* p){ - return VAR_T(VoidP, p); -} - #define POINTER_VAR(Tp, NAME) \ inline PyObject* py_var(VM* vm, Tp val){ \ const static std::pair P("c", NAME); \ diff --git a/include/pocketpy/linalg.h b/include/pocketpy/linalg.h index e05ca423..ad93e556 100644 --- a/include/pocketpy/linalg.h +++ b/include/pocketpy/linalg.h @@ -133,12 +133,6 @@ struct Mat3x3{ Vec2 _s() const; }; - -inline PyObject* py_var(VM* vm, Vec2 obj){ return VAR_T(Vec2, obj); } -inline PyObject* py_var(VM* vm, Vec3 obj){ return VAR_T(Vec3, obj); } -inline PyObject* py_var(VM* vm, Vec4 obj){ return VAR_T(Vec4, obj); } -inline PyObject* py_var(VM* vm, const Mat3x3& obj){ return VAR_T(Mat3x3, obj); } - void add_module_linalg(VM* vm); static_assert(sizeof(Py_) <= 64); diff --git a/include/pocketpy/obj.h b/include/pocketpy/obj.h index 85abe4ee..66cfdee2 100644 --- a/include/pocketpy/obj.h +++ b/include/pocketpy/obj.h @@ -210,6 +210,7 @@ inline void gc_mark_namedict(NameDict& t){ StrName _type_name(VM* vm, Type type); template T to_void_p(VM*, PyObject*); +PyObject* from_void_p(VM*, void*); #define VAR(x) py_var(vm, x) #define CAST(T, x) py_cast(vm, x) diff --git a/include/pocketpy/vm.h b/include/pocketpy/vm.h index bc8ce73b..2f8da5be 100644 --- a/include/pocketpy/vm.h +++ b/include/pocketpy/vm.h @@ -504,6 +504,8 @@ PyObject* py_var(VM* vm, __T&& value){ }else if constexpr(is_floating_point_v){ // float return tag_float(static_cast(std::forward<__T>(value))); + }else if constexpr(std::is_pointer_v){ + return from_void_p(vm, (void*)value); }else{ constexpr Type const_type = _find_type_in_const_cxx_typeid_map(); if constexpr(const_type.index >= 0){ diff --git a/src/cffi.cpp b/src/cffi.cpp index 6685904a..d252925d 100644 --- a/src/cffi.cpp +++ b/src/cffi.cpp @@ -271,4 +271,8 @@ void add_module_c(VM* vm){ }); } +PyObject* from_void_p(VM* vm, void* p){ + return VAR_T(VoidP, p); +} + } // namespace pkpy \ No newline at end of file