[pypy-commit] pypy py3.6: hg merge default

antocuni pypy.commits at gmail.com
Tue Dec 24 08:14:08 EST 2019


Author: Antonio Cuni <anto.cuni at 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;;


More information about the pypy-commit mailing list