blueloveTH 2 лет назад
Родитель
Сommit
e82cad5b25
5 измененных файлов с 7 добавлено и 14 удалено
  1. 0 8
      include/pocketpy/cffi.h
  2. 0 6
      include/pocketpy/linalg.h
  3. 1 0
      include/pocketpy/obj.h
  4. 2 0
      include/pocketpy/vm.h
  5. 4 0
      src/cffi.cpp

+ 0 - 8
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<StrName, StrName> P("c", NAME);      \

+ 0 - 6
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_<Mat3x3>) <= 64);

+ 1 - 0
include/pocketpy/obj.h

@@ -210,6 +210,7 @@ inline void gc_mark_namedict(NameDict& t){
 
 StrName _type_name(VM* vm, Type type);
 template<typename T> 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<T>(vm, x)

+ 2 - 0
include/pocketpy/vm.h

@@ -504,6 +504,8 @@ PyObject* py_var(VM* vm, __T&& value){
     }else if constexpr(is_floating_point_v<T>){
         // float
         return tag_float(static_cast<f64>(std::forward<__T>(value)));
+    }else if constexpr(std::is_pointer_v<T>){
+        return from_void_p(vm, (void*)value);
     }else{
         constexpr Type const_type = _find_type_in_const_cxx_typeid_map<T>();
         if constexpr(const_type.index >= 0){

+ 4 - 0
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