Jelajahi Sumber

remove `bind_notimplemented_constructor`

blueloveTH 1 tahun lalu
induk
melakukan
e27f100b18
6 mengubah file dengan 6 tambahan dan 18 penghapusan
  1. 0 1
      3rd/lua_bridge/src/lua_bridge.cpp
  2. 6 7
      include/pocketpy/vm.h
  3. 0 1
      src/array2d.cpp
  4. 0 3
      src/collections.cpp
  5. 0 5
      src/iter.cpp
  6. 0 1
      src/modules.cpp

+ 0 - 1
3rd/lua_bridge/src/lua_bridge.cpp

@@ -197,7 +197,6 @@ static PyObject* lua_popx_multi_to_python(VM* vm, int count){
 
 struct PyLuaFunction: PyLuaObject{
     static void _register(VM* vm, PyObject* mod, PyObject* type){
-        vm->bind_notimplemented_constructor<PyLuaFunction>(type);
         vm->bind_func(type, __call__, -1, [](VM* vm, ArgsView args){
             if(args.size() < 1) vm->TypeError("__call__ takes at least 1 argument");
             const PyLuaFunction& self = _CAST(PyLuaFunction&, args[0]);

+ 6 - 7
include/pocketpy/vm.h

@@ -310,13 +310,6 @@ public:
     template<typename T, typename F, bool ReadOnly=false>
     PyObject* bind_field(PyObject*, const char*, F T::*);
 
-    template<typename T, typename __T>
-    PyObject* bind_notimplemented_constructor(__T&& type) {
-        return bind_func<-1>(std::forward<__T>(type), __new__, [](VM* vm, ArgsView args){
-            vm->NotImplementedError();
-            return vm->None;
-        });
-    }
     /********** error **********/
     void _error(PyObject*);
     void StackOverflowError() { __builtin_error("StackOverflowError"); }
@@ -362,6 +355,12 @@ public:
         mod->attr().set(name, type);
         _cxx_typeid_map[typeid(T)] = PK_OBJ_GET(Type, type);
         T::_register(vm, mod, type);
+        if(!type->attr().contains(__new__)){
+            bind_func(type, __new__, -1, [](VM* vm, ArgsView args){
+                vm->NotImplementedError();
+                return vm->None;
+            });
+        }
         return type;
     }
 

+ 0 - 1
src/array2d.cpp

@@ -352,7 +352,6 @@ struct Array2dIter{
     void _gc_mark() const{ PK_OBJ_MARK(ref); }
 
     static void _register(VM* vm, PyObject* mod, PyObject* type){
-        vm->bind_notimplemented_constructor<Array2dIter>(type);
         vm->bind__iter__(PK_OBJ_GET(Type, type), [](VM* vm, PyObject* _0) { return _0; });
         vm->bind__next__(PK_OBJ_GET(Type, type), [](VM* vm, PyObject* _0) -> unsigned{
             Array2dIter& self = PK_OBJ_GET(Array2dIter, _0);

+ 0 - 3
src/collections.cpp

@@ -23,9 +23,6 @@ namespace pkpy
     };
     void PyDequeIter::_register(VM *vm, PyObject *mod, PyObject *type)
     {
-        // Iterator for the deque type
-        vm->bind_notimplemented_constructor<PyDequeIter>(type);
-
         vm->bind__iter__(PK_OBJ_GET(Type, type), [](VM *vm, PyObject *obj)
                          { return obj; });
         vm->bind__next__(PK_OBJ_GET(Type, type), [](VM *vm, PyObject *obj) -> unsigned

+ 0 - 5
src/iter.cpp

@@ -3,7 +3,6 @@
 namespace pkpy{
 
     void RangeIter::_register(VM* vm, PyObject* mod, PyObject* type){
-        vm->bind_notimplemented_constructor<RangeIter>(type);
         vm->bind__iter__(PK_OBJ_GET(Type, type), [](VM* vm, PyObject* _0){ return _0; });
         vm->bind__next__(PK_OBJ_GET(Type, type), [](VM* vm, PyObject* _0) -> unsigned{
             RangeIter& self = PK_OBJ_GET(RangeIter, _0);
@@ -19,7 +18,6 @@ namespace pkpy{
     }
 
     void ArrayIter::_register(VM* vm, PyObject* mod, PyObject* type){
-        vm->bind_notimplemented_constructor<ArrayIter>(type);
         vm->bind__iter__(PK_OBJ_GET(Type, type), [](VM* vm, PyObject* _0){ return _0; });
         vm->bind__next__(PK_OBJ_GET(Type, type), [](VM* vm, PyObject* _0) -> unsigned{
             ArrayIter& self = _CAST(ArrayIter&, _0);
@@ -30,7 +28,6 @@ namespace pkpy{
     }
 
     void StringIter::_register(VM* vm, PyObject* mod, PyObject* type){
-        vm->bind_notimplemented_constructor<StringIter>(type);
         vm->bind__iter__(PK_OBJ_GET(Type, type), [](VM* vm, PyObject* _0){ return _0; });
         vm->bind__next__(PK_OBJ_GET(Type, type), [](VM* vm, PyObject* _0) -> unsigned{
             StringIter& self = _CAST(StringIter&, _0);
@@ -78,7 +75,6 @@ namespace pkpy{
     }
 
     void Generator::_register(VM* vm, PyObject* mod, PyObject* type){
-        vm->bind_notimplemented_constructor<Generator>(type);
         vm->bind__iter__(PK_OBJ_GET(Type, type), [](VM* vm, PyObject* _0){ return _0; });
         vm->bind__next__(PK_OBJ_GET(Type, type), [](VM* vm, PyObject* _0) -> unsigned{
             Generator& self = _CAST(Generator&, _0);
@@ -90,7 +86,6 @@ namespace pkpy{
     }
 
     void DictItemsIter::_register(VM *vm, PyObject *mod, PyObject *type){
-        vm->bind_notimplemented_constructor<DictItemsIter>(type);
         vm->bind__iter__(PK_OBJ_GET(Type, type), [](VM* vm, PyObject* _0){ return _0; });
         vm->bind__next__(PK_OBJ_GET(Type, type), [](VM* vm, PyObject* _0) -> unsigned{
             DictItemsIter& self = _CAST(DictItemsIter&, _0);

+ 0 - 1
src/modules.cpp

@@ -27,7 +27,6 @@ struct PyStructTime{
     }
 
     static void _register(VM* vm, PyObject* mod, PyObject* type){
-        vm->bind_notimplemented_constructor<PyStructTime>(type);
         PY_READONLY_FIELD(PyStructTime, "tm_year", tm_year);
         PY_READONLY_FIELD(PyStructTime, "tm_mon", tm_mon);
         PY_READONLY_FIELD(PyStructTime, "tm_mday", tm_mday);