Author: Ronan Lamy <[email protected]>
Branch: py3.5
Changeset: r92521:45380b7b402f
Date: 2017-09-30 00:42 +0200
http://bitbucket.org/pypy/pypy/changeset/45380b7b402f/
Log: hg merge default
diff --git a/pypy/doc/release-v5.9.0.rst b/pypy/doc/release-v5.9.0.rst
--- a/pypy/doc/release-v5.9.0.rst
+++ b/pypy/doc/release-v5.9.0.rst
@@ -148,8 +148,7 @@
* Issue 2590_: fix the bounds in the GC when allocating a lot of objects
with finalizers
* Replace magical NOT RPYTHON comment with a decorator
* Implement ``socket.sendmsg()``/``.recvmsg()`` for py3.5
- * Reduce excessive ``memory_pressure`` for ``_SSLContext`` objects and add
- ``memory_pressure`` for ``_SSLSocket`` objects
+ * Add ``memory_pressure`` for ``_SSLSocket`` objects
* Degredations
diff --git a/pypy/module/cpyext/api.py b/pypy/module/cpyext/api.py
--- a/pypy/module/cpyext/api.py
+++ b/pypy/module/cpyext/api.py
@@ -669,6 +669,10 @@
'PySlice_Type': 'space.gettypeobject(W_SliceObject.typedef)',
'PyStaticMethod_Type': 'space.gettypeobject(StaticMethod.typedef)',
'PyCFunction_Type':
'space.gettypeobject(cpyext.methodobject.W_PyCFunctionObject.typedef)',
+ 'PyClassMethodDescr_Type':
'space.gettypeobject(cpyext.methodobject.W_PyCClassMethodObject.typedef)',
+ 'PyGetSetDescr_Type':
'space.gettypeobject(cpyext.typeobject.W_GetSetPropertyEx.typedef)',
+ 'PyMemberDescr_Type':
'space.gettypeobject(cpyext.typeobject.W_MemberDescr.typedef)',
+ 'PyMethodDescr_Type':
'space.gettypeobject(cpyext.methodobject.W_PyCMethodObject.typedef)',
'PyWrapperDescr_Type':
'space.gettypeobject(cpyext.methodobject.W_PyCWrapperObject.typedef)',
'PyInstanceMethod_Type':
'space.gettypeobject(cpyext.classobject.InstanceMethod.typedef)',
}.items():
diff --git a/pypy/module/cpyext/test/test_typeobject.py
b/pypy/module/cpyext/test/test_typeobject.py
--- a/pypy/module/cpyext/test/test_typeobject.py
+++ b/pypy/module/cpyext/test/test_typeobject.py
@@ -1362,6 +1362,11 @@
assert B() == 42
+ # aaaaa even more hackiness
+ class C(A):
+ pass
+ C(42) # assert is not aborting
+
class AppTestHashable(AppTestCpythonExtensionBase):
def test_unhashable(self):
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
@@ -682,14 +682,30 @@
# it can fail if self.__base__ happens not to be the first base.
#
from pypy.module.cpyext.methodobject import W_PyCFunctionObject
+
+ if isinstance(w_newdescr, W_PyCFunctionObject):
+ return self._really_hack_which_new_to_call(w_newtype, w_newdescr)
+ else:
+ return w_newtype, w_newdescr
+
+ def _really_hack_which_new_to_call(self, w_newtype, w_newdescr):
+ # This logic is moved in yet another helper function that
+ # is recursive. We call this only if we see a
+ # W_PyCFunctionObject. That's a performance optimization
+ # because in the common case, we won't call any function that
+ # contains the stack checks.
+ from pypy.module.cpyext.methodobject import W_PyCFunctionObject
from pypy.module.cpyext.typeobject import is_tp_new_wrapper
if (isinstance(w_newdescr, W_PyCFunctionObject) and
+ w_newtype is not self and
is_tp_new_wrapper(self.space, w_newdescr.ml)):
w_bestbase = find_best_base(self.bases_w)
- return w_bestbase.lookup_where('__new__')
- else:
- return w_newtype, w_newdescr
+ if w_bestbase is not None:
+ w_newtype, w_newdescr = w_bestbase.lookup_where('__new__')
+ return w_bestbase._really_hack_which_new_to_call(w_newtype,
+ w_newdescr)
+ return w_newtype, w_newdescr
def descr_repr(self, space):
w_mod = self.get_module()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit