Author: Antonio Cuni <anto.c...@gmail.com> Branch: py3.6 Changeset: r98382:4af6d07b98ee Date: 2019-12-24 12:17 +0100 http://bitbucket.org/pypy/pypy/changeset/4af6d07b98ee/
Log: hg merge default diff --git a/.hgtags b/.hgtags --- a/.hgtags +++ b/.hgtags @@ -66,3 +66,7 @@ c124c11a5921bf12797b08a696753a12ae82595a release-pypy2.7-v7.3.0rc3 c124c11a5921bf12797b08a696753a12ae82595a release-pypy3.6-v7.2.0rc3 0000000000000000000000000000000000000000 release-pypy3.6-v7.2.0rc3 +1608da62bfc71e8ac775121dd0b21bb72e61c6ea release-pypy3.6-v7.3.0rc4 +724f1a7d62e8d8ac0fa20823f5c35497b29ad56f release-pypy2.7-v7.3.0rc4 +724f1a7d62e8d8ac0fa20823f5c35497b29ad56f release-pypy2.7-v7.3.0 +1608da62bfc71e8ac775121dd0b21bb72e61c6ea release-pypy3.6-v7.3.0 diff --git a/pypy/doc/release-v7.3.0.rst b/pypy/doc/release-v7.3.0.rst --- a/pypy/doc/release-v7.3.0.rst +++ b/pypy/doc/release-v7.3.0.rst @@ -197,7 +197,8 @@ * Add ``PyObject_GenericGetDict``, ``PyObject_GenericSetDict``, ``_Py_strhex``, ``_Py_strhex_bytes``, ``PyUnicodeNew``, ``_PyFinalizing``, - ``PySlice_Unpack``, ``PySlice_AdjustIndices``, ``PyOS_FSPath`` + ``PySlice_Unpack``, ``PySlice_AdjustIndices``, ``PyOS_FSPath``, + ``PyModule_AddFunctions`` * Implement ``pystrhex.h`` (`issue 2687`_) * Make ``PyUnicodeObject`` slightly more compact * Fix memory leak when releasing a ``PyUnicodeObject`` diff --git a/pypy/doc/whatsnew-head.rst b/pypy/doc/whatsnew-head.rst --- a/pypy/doc/whatsnew-head.rst +++ b/pypy/doc/whatsnew-head.rst @@ -3,5 +3,8 @@ ============================ .. this is a revision shortly after release-pypy-7.3.0 -.. startrev: 994c42529580 +.. startrev: 994c42529580 +.. branch: cpyext-speedup-tests + +Make cpyext test faster, especially on py3.6 diff --git a/pypy/module/cpyext/moduledef.py b/pypy/module/cpyext/moduledef.py --- a/pypy/module/cpyext/moduledef.py +++ b/pypy/module/cpyext/moduledef.py @@ -5,6 +5,7 @@ class Module(MixedModule): interpleveldefs = { 'is_cpyext_function': 'interp_cpyext.is_cpyext_function', + 'FunctionType': 'methodobject.W_PyCFunctionObject', } appleveldefs = { @@ -14,15 +15,6 @@ def startup(self, space): space.fromcache(State).startup(space) - method = pypy.module.cpyext.typeobject.get_new_method_def(space) - # the w_self argument here is a dummy, the only thing done with w_obj - # is call type() on it - w_obj = pypy.module.cpyext.methodobject.W_PyCFunctionObject(space, - method, space.w_None) - space.appexec([w_obj], """(meth): - from pickle import Pickler - Pickler.dispatch[type(meth)] = Pickler.save_global - """) def register_atexit(self, function): if len(self.atexit_funcs) >= 32: diff --git a/pypy/module/cpyext/test/test_cpyext.py b/pypy/module/cpyext/test/test_cpyext.py --- a/pypy/module/cpyext/test/test_cpyext.py +++ b/pypy/module/cpyext/test/test_cpyext.py @@ -84,23 +84,6 @@ def freeze_refcnts(self): rawrefcount._dont_free_any_more() -def preload(space, name): - from pypy.module.cpyext.pyobject import make_ref - if '.' not in name: - w_obj = space.builtin.getdictvalue(space, name) - else: - module, localname = name.rsplit('.', 1) - code = "(): import {module}; return {module}.{localname}" - code = code.format(**locals()) - w_obj = space.appexec([], code) - make_ref(space, w_obj) - -def preload_expr(space, expr): - from pypy.module.cpyext.pyobject import make_ref - code = "(): return {}".format(expr) - w_obj = space.appexec([], code) - make_ref(space, w_obj) - def is_interned_string(space, w_obj): try: u = space.utf8_w(w_obj) @@ -151,13 +134,37 @@ Eagerly create pyobjs for various builtins so they don't look like leaks. """ - for name in [ - 'buffer', 'mmap.mmap', - 'types.FunctionType', 'types.CodeType', - 'types.TracebackType', 'types.FrameType']: - preload(space, name) - for expr in ['type(str.join)']: - preload_expr(space, expr) + from pypy.module.cpyext.pyobject import make_ref + w_to_preload = space.appexec([], """(): + import sys + import mmap + # + # copied&pasted to avoid importing the whole types.py, which is + # expensive on py3k + # <types.py> + def _f(): pass + FunctionType = type(_f) + CodeType = type(_f.__code__) + try: + raise TypeError + except TypeError: + tb = sys.exc_info()[2] + TracebackType = type(tb) + FrameType = type(tb.tb_frame) + del tb + # </types.py> + return [ + buffer, + mmap.mmap, + FunctionType, + CodeType, + TracebackType, + FrameType, + type(str.join), + ] + """) + for w_obj in space.unpackiterable(w_to_preload): + make_ref(space, w_obj) def cleanup(self): self.space.getexecutioncontext().cleanup_cpyext_state() diff --git a/pypy/tool/release/repackage.sh b/pypy/tool/release/repackage.sh --- a/pypy/tool/release/repackage.sh +++ b/pypy/tool/release/repackage.sh @@ -3,7 +3,7 @@ pmin=7 # python minor version maj=7 min=3 -rev=0rc1 +rev=0 case $pmaj in "2") exe=pypy;; _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit