blueloveTH 1 год назад
Родитель
Сommit
c7495853ec
2 измененных файлов с 9 добавлено и 0 удалено
  1. 1 0
      include/pocketpy/vm.h
  2. 8 0
      src/vm.cpp

+ 1 - 0
include/pocketpy/vm.h

@@ -253,6 +253,7 @@ public:
     void bind__str__(Type type, PyObject* (*f)(VM*, PyObject*));
     void bind__iter__(Type type, PyObject* (*f)(VM*, PyObject*));
     void bind__next__(Type type, unsigned (*f)(VM*, PyObject*));
+    [[deprecated]] void bind__next__(Type type, PyObject* (*f)(VM*, PyObject*));
     void bind__neg__(Type type, PyObject* (*f)(VM*, PyObject*));
     void bind__invert__(Type type, PyObject* (*f)(VM*, PyObject*));
     void bind__hash__(Type type, i64 (*f)(VM* vm, PyObject*));

+ 8 - 0
src/vm.cpp

@@ -1333,6 +1333,14 @@ void VM::bind__delitem__(Type type, void (*f)(VM*, PyObject*, PyObject*)){
         PK_OBJ_GET(NativeFunc, nf).set_userdata(f);                                        \
     }
 
+    void VM::bind__next__(Type type, PyObject* (*f)(VM*, PyObject*)){
+        PyObject* nf = bind_method<0>(_t(type), __next__, [](VM* vm, ArgsView args){
+            auto f = lambda_get_userdata<PyObject*(*)(VM*, PyObject*)>(args.begin());
+            return f(vm, args[0]);
+        });
+        PK_OBJ_GET(NativeFunc, nf).set_userdata(f);
+    }
+
 #define BIND_UNARY_SPECIAL(name)                                                        \
     void VM::bind##name(Type type, PyObject* (*f)(VM*, PyObject*)){                         \
         _all_types[type].m##name = f;                                                   \