Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r90746:7d81a8c7bdae Date: 2017-03-18 16:20 +0100 http://bitbucket.org/pypy/pypy/changeset/7d81a8c7bdae/
Log: Issue #2504: PyClass_New() can be called with NULL as its first argument diff --git a/pypy/module/cpyext/classobject.py b/pypy/module/cpyext/classobject.py --- a/pypy/module/cpyext/classobject.py +++ b/pypy/module/cpyext/classobject.py @@ -39,6 +39,8 @@ @cpython_api([PyObject, PyObject, PyObject], PyObject) def PyClass_New(space, w_bases, w_dict, w_name): + if w_bases is None: + w_bases = space.newtuple([]) w_classobj = space.gettypefor(W_ClassObject) return space.call_function(w_classobj, w_name, w_bases, w_dict) diff --git a/pypy/module/cpyext/test/test_classobject.py b/pypy/module/cpyext/test/test_classobject.py --- a/pypy/module/cpyext/test/test_classobject.py +++ b/pypy/module/cpyext/test/test_classobject.py @@ -77,3 +77,15 @@ class C: pass assert module.get_classtype() is type(C) + + def test_pyclass_new_no_bases(self): + module = self.import_extension('foo', [ + ("new_foo", "METH_O", + """ + return PyClass_New(NULL, PyDict_New(), args); + """)]) + FooClass = module.new_foo("FooClass") + class Cls1: + pass + assert type(FooClass) is type(Cls1) + assert FooClass.__bases__ == Cls1.__bases__ _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit