[pypy-commit] pypy py3.5: (ronan, plan_rich) fix descriptor invocation inside the descr_call of W_TypeObject
plan_rich
pypy.commits at gmail.com
Tue Feb 28 05:40:16 EST 2017
Author: Richard Plangger <planrichi at gmail.com>
Branch: py3.5
Changeset: r90413:411407ffbeac
Date: 2017-02-27 18:55 +0100
http://bitbucket.org/pypy/pypy/changeset/411407ffbeac/
Log: (ronan, plan_rich) fix descriptor invocation inside the descr_call
of W_TypeObject
diff --git a/pypy/objspace/std/typeobject.py b/pypy/objspace/std/typeobject.py
--- a/pypy/objspace/std/typeobject.py
+++ b/pypy/objspace/std/typeobject.py
@@ -631,7 +631,7 @@
if w_newdescr is None: # see test_crash_mro_without_object_1
raise oefmt(space.w_TypeError, "cannot create '%N' instances",
self)
- w_newfunc = space.get(w_newdescr, self)
+ w_newfunc = space.get(w_newdescr, space.w_None, w_type=self)
if (space.config.objspace.std.newshortcut and
not we_are_jitted() and
isinstance(w_newtype, W_TypeObject)):
diff --git a/pypy/objspace/test/test_descriptor.py b/pypy/objspace/test/test_descriptor.py
--- a/pypy/objspace/test/test_descriptor.py
+++ b/pypy/objspace/test/test_descriptor.py
@@ -152,3 +152,13 @@
assert hash(myfloat(-1.0)) == -2
assert hash(myHashClass()) == -2
assert hash(myHashClass3()) == hash(-10**100)
+
+ def test_descr_funny_new(self):
+ class C(object):
+ @classmethod
+ def __new__(*args):
+ return args
+
+ assert C.__new__(1,2) == (C, 1, 2)
+ assert C(1,2) == (C, C, 1, 2)
+
More information about the pypy-commit
mailing list