diff --git a/3rd/lua_bridge/src/lua_bridge.cpp b/3rd/lua_bridge/src/lua_bridge.cpp index 1d51c5b3..61633725 100644 --- a/3rd/lua_bridge/src/lua_bridge.cpp +++ b/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(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]); diff --git a/include/pocketpy/vm.h b/include/pocketpy/vm.h index e1ca2093..f301b4f4 100644 --- a/include/pocketpy/vm.h +++ b/include/pocketpy/vm.h @@ -310,13 +310,6 @@ public: template PyObject* bind_field(PyObject*, const char*, F T::*); - template - 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; } diff --git a/src/array2d.cpp b/src/array2d.cpp index c8974226..41b2c0f1 100644 --- a/src/array2d.cpp +++ b/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(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); diff --git a/src/collections.cpp b/src/collections.cpp index 1f0a43b5..989fe8ca 100644 --- a/src/collections.cpp +++ b/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(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 diff --git a/src/iter.cpp b/src/iter.cpp index be332e36..2383820d 100644 --- a/src/iter.cpp +++ b/src/iter.cpp @@ -3,7 +3,6 @@ namespace pkpy{ void RangeIter::_register(VM* vm, PyObject* mod, PyObject* type){ - vm->bind_notimplemented_constructor(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(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(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(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(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); diff --git a/src/modules.cpp b/src/modules.cpp index 667fbc0b..2b4ed13e 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -27,7 +27,6 @@ struct PyStructTime{ } static void _register(VM* vm, PyObject* mod, PyObject* type){ - vm->bind_notimplemented_constructor(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);