[pypy-commit] pypy py3k: hg merge default

mjacob pypy.commits at gmail.com
Fri Feb 26 11:33:19 EST 2016


Author: Manuel Jacob <me at manueljacob.de>
Branch: py3k
Changeset: r82569:12537e5dacda
Date: 2016-02-26 17:30 +0100
http://bitbucket.org/pypy/pypy/changeset/12537e5dacda/

Log:	hg merge default

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
@@ -170,4 +170,17 @@
 
 When creating instances and adding attributes in several different orders
 depending on some condition, the JIT would create too much code. This is now
-fixed.
\ No newline at end of file
+fixed.
+
+.. branch: cpyext-gc-support-2
+
+Improve CPython C API support, which means lxml now runs unmodified
+(after removing pypy hacks, pending pull request)
+
+.. branch: look-inside-tuple-hash
+
+Look inside tuple hash, improving mdp benchmark
+
+.. branch: vlen-resume
+
+Compress resume data, saving 10-20% of memory consumed by the JIT
\ No newline at end of file
diff --git a/pypy/module/thread/test/test_thread.py b/pypy/module/thread/test/test_thread.py
--- a/pypy/module/thread/test/test_thread.py
+++ b/pypy/module/thread/test/test_thread.py
@@ -239,14 +239,12 @@
                 if waiting:
                     _thread.interrupt_main()
                     return
-                print('tock...', x)  # <-force the GIL to be released, as
-                time.sleep(0.1)    #   time.sleep doesn't do non-translated
+                time.sleep(0.1)
 
         def busy_wait():
             waiting.append(None)
             for x in range(100):
-                print('tick...', x)  # <-force the GIL to be released, as
-                time.sleep(0.1)    #   time.sleep doesn't do non-translated
+                time.sleep(0.1)
             waiting.pop()
 
         # This is normally called by app_main.py
diff --git a/pypy/module/time/interp_time.py b/pypy/module/time/interp_time.py
--- a/pypy/module/time/interp_time.py
+++ b/pypy/module/time/interp_time.py
@@ -4,7 +4,7 @@
 from pypy.interpreter.gateway import unwrap_spec
 from rpython.rtyper.lltypesystem import lltype
 from rpython.rlib.rarithmetic import intmask
-from rpython.rlib import rposix
+from rpython.rlib import rposix, rtime
 from rpython.translator.tool.cbuild import ExternalCompilationInfo
 import os
 import sys
@@ -314,13 +314,13 @@
         if secs < 0:
             raise OperationError(space.w_IOError,
                                  space.wrap("Invalid argument: negative time in sleep"))
-        pytime.sleep(secs)
+        rtime.sleep(secs)
 else:
     from rpython.rlib import rwin32
     from errno import EINTR
     def _simple_sleep(space, secs, interruptible):
         if secs == 0.0 or not interruptible:
-            pytime.sleep(secs)
+            rtime.sleep(secs)
         else:
             millisecs = int(secs * 1000)
             interrupt_event = space.fromcache(State).get_interrupt_event()
@@ -329,7 +329,7 @@
             if rc == rwin32.WAIT_OBJECT_0:
                 # Yield to make sure real Python signal handler
                 # called.
-                pytime.sleep(0.001)
+                rtime.sleep(0.001)
                 raise wrap_oserror(space,
                                    OSError(EINTR, "sleep() interrupted"))
     @unwrap_spec(secs=float)
diff --git a/pypy/objspace/std/mapdict.py b/pypy/objspace/std/mapdict.py
--- a/pypy/objspace/std/mapdict.py
+++ b/pypy/objspace/std/mapdict.py
@@ -65,21 +65,8 @@
     def delete(self, obj, name, index):
         pass
 
+    @jit.elidable
     def find_map_attr(self, name, index):
-        if jit.we_are_jitted():
-            # hack for the jit:
-            # the _find_map_attr method is pure too, but its argument is never
-            # constant, because it is always a new tuple
-            return self._find_map_attr_jit_pure(name, index)
-        else:
-            return self._find_map_attr_indirection(name, index)
-
-    @jit.elidable
-    def _find_map_attr_jit_pure(self, name, index):
-        return self._find_map_attr_indirection(name, index)
-
-    @jit.dont_look_inside
-    def _find_map_attr_indirection(self, name, index):
         if (self.space.config.objspace.std.withmethodcache):
             return self._find_map_attr_cache(name, index)
         return self._find_map_attr(name, index)
diff --git a/pypy/tool/test/test_tab.py b/pypy/tool/test/test_tab.py
--- a/pypy/tool/test/test_tab.py
+++ b/pypy/tool/test/test_tab.py
@@ -6,6 +6,7 @@
 from pypy.conftest import pypydir
 
 ROOT = os.path.abspath(os.path.join(pypydir, '..'))
+RPYTHONDIR = os.path.join(ROOT, "rpython")
 EXCLUDE = {'/virt_test/lib/python2.7/site-packages/setuptools'}
 
 
@@ -28,3 +29,27 @@
                 if not entry.startswith('.'):
                     walk('%s/%s' % (reldir, entry))
     walk('')
+
+def test_no_pypy_import_in_rpython():
+    def walk(reldir):
+        print reldir
+        if reldir:
+            path = os.path.join(RPYTHONDIR, *reldir.split('/'))
+        else:
+            path = RPYTHONDIR
+        if os.path.isfile(path):
+            if not path.lower().endswith('.py'):
+                return
+            with file(path) as f:
+                for line in f:
+                    if "import" not in line:
+                        continue
+                    assert "from pypy." not in line
+                    assert "import pypy." not in line
+        elif os.path.isdir(path) and not os.path.islink(path):
+            for entry in os.listdir(path):
+                if not entry.startswith('.'):
+                    walk('%s/%s' % (reldir, entry))
+
+    walk('')
+
diff --git a/rpython/jit/metainterp/test/test_jitdriver.py b/rpython/jit/metainterp/test/test_jitdriver.py
--- a/rpython/jit/metainterp/test/test_jitdriver.py
+++ b/rpython/jit/metainterp/test/test_jitdriver.py
@@ -227,7 +227,7 @@
                 i += 1
 
         self.meta_interp(f, [0])
-        self.check_resops(enter_portal_frame=1, leave_portal_frame=1)
+        self.check_simple_loop(enter_portal_frame=1, leave_portal_frame=1)
 
 class TestLLtype(MultipleJitDriversTests, LLJitMixin):
     pass
diff --git a/rpython/rlib/test/test_posix.py b/rpython/rlib/test/test_posix.py
--- a/rpython/rlib/test/test_posix.py
+++ b/rpython/rlib/test/test_posix.py
@@ -1,4 +1,4 @@
-import py
+import py.test
 from rpython.rtyper.test.tool import BaseRtypingTest
 from rpython.rtyper.annlowlevel import hlstr
 from rpython.tool.udir import udir
@@ -58,7 +58,7 @@
         assert res
 
     def test_times(self):
-        import py; py.test.skip("llinterp does not like tuple returns")
+        py.test.skip("llinterp does not like tuple returns")
         from rpython.rtyper.test.test_llinterp import interpret
         times = interpret(lambda: posix.times(), ())
         assert isinstance(times, tuple)
@@ -119,21 +119,21 @@
         res = self.interpret(f,[fi,20])
         assert self.ll_to_string(res) == text
 
-    if hasattr(os, 'chown'):
-        def test_chown(self):
-            f = open(path, "w")
-            f.write("xyz")
-            f.close()
-            def f():
-                try:
-                    posix.chown(path, os.getuid(), os.getgid())
-                    return 1
-                except OSError:
-                    return 2
+    @py.test.mark.skipif("not hasattr(os, 'chown')")
+    def test_chown(self):
+        f = open(path, "w")
+        f.write("xyz")
+        f.close()
+        def f():
+            try:
+                posix.chown(path, os.getuid(), os.getgid())
+                return 1
+            except OSError:
+                return 2
 
-            assert self.interpret(f, []) == 1
-            os.unlink(path)
-            assert self.interpret(f, []) == 2
+        assert self.interpret(f, []) == 1
+        os.unlink(path)
+        assert self.interpret(f, []) == 2
 
     def test_close(self):
         def f(fi):
@@ -144,70 +144,70 @@
         res = self.interpret(f,[fi])
         py.test.raises( OSError, os.fstat, fi)
 
-    if hasattr(os, 'ftruncate'):
-        def test_ftruncate(self):
-            def f(fi,len):
-                os.ftruncate(fi,len)
-            fi = os.open(path,os.O_RDWR,0777)
-            func = self.interpret(f,[fi,6])
-            assert os.fstat(fi).st_size == 6
+    @py.test.mark.skipif("not hasattr(os, 'ftruncate')")
+    def test_ftruncate(self):
+        def f(fi,len):
+            os.ftruncate(fi,len)
+        fi = os.open(path,os.O_RDWR,0777)
+        func = self.interpret(f,[fi,6])
+        assert os.fstat(fi).st_size == 6
 
-    if hasattr(os, 'getuid'):
-        def test_getuid(self):
-            def f():
-                return os.getuid()
-            assert self.interpret(f, []) == f()
+    @py.test.mark.skipif("not hasattr(os, 'getuid')")
+    def test_getuid(self):
+        def f():
+            return os.getuid()
+        assert self.interpret(f, []) == f()
 
-    if hasattr(os, 'getgid'):
-        def test_getgid(self):
-            def f():
-                return os.getgid()
-            assert self.interpret(f, []) == f()
+    @py.test.mark.skipif("not hasattr(os, 'getgid')")
+    def test_getgid(self):
+        def f():
+            return os.getgid()
+        assert self.interpret(f, []) == f()
 
-    if hasattr(os, 'setuid'):
-        def test_os_setuid(self):
-            def f():
-                os.setuid(os.getuid())
-                return os.getuid()
-            assert self.interpret(f, []) == f()
+    @py.test.mark.skipif("not hasattr(os, 'setuid')")
+    def test_os_setuid(self):
+        def f():
+            os.setuid(os.getuid())
+            return os.getuid()
+        assert self.interpret(f, []) == f()
 
-    if hasattr(os, 'sysconf'):
-        def test_os_sysconf(self):
-            def f(i):
-                return os.sysconf(i)
-            assert self.interpret(f, [13]) == f(13)
+    @py.test.mark.skipif("not hasattr(os, 'sysconf')")
+    def test_os_sysconf(self):
+        def f(i):
+            return os.sysconf(i)
+        assert self.interpret(f, [13]) == f(13)
 
-    if hasattr(os, 'confstr'):
-        def test_os_confstr(self):
-            def f(i):
-                try:
-                    return os.confstr(i)
-                except OSError:
-                    return "oooops!!"
-            some_value = os.confstr_names.values()[-1]
-            res = self.interpret(f, [some_value])
-            assert hlstr(res) == f(some_value)
-            res = self.interpret(f, [94781413])
-            assert hlstr(res) == "oooops!!"
+    @py.test.mark.skipif("not hasattr(os, 'confstr')")
+    def test_os_confstr(self):
+        def f(i):
+            try:
+                return os.confstr(i)
+            except OSError:
+                return "oooops!!"
+        some_value = os.confstr_names.values()[-1]
+        res = self.interpret(f, [some_value])
+        assert hlstr(res) == f(some_value)
+        res = self.interpret(f, [94781413])
+        assert hlstr(res) == "oooops!!"
 
-    if hasattr(os, 'pathconf'):
-        def test_os_pathconf(self):
-            def f(i):
-                return os.pathconf("/tmp", i)
-            i = os.pathconf_names["PC_NAME_MAX"]
-            some_value = self.interpret(f, [i])
-            assert some_value >= 31
+    @py.test.mark.skipif("not hasattr(os, 'pathconf')")
+    def test_os_pathconf(self):
+        def f(i):
+            return os.pathconf("/tmp", i)
+        i = os.pathconf_names["PC_NAME_MAX"]
+        some_value = self.interpret(f, [i])
+        assert some_value >= 31
 
-    if hasattr(os, 'chroot'):
-        def test_os_chroot(self):
-            def f():
-                try:
-                    os.chroot('!@$#!#%$#^#@!#!$$#^')
-                except OSError:
-                    return 1
-                return 0
+    @py.test.mark.skipif("not hasattr(os, 'chroot')")
+    def test_os_chroot(self):
+        def f():
+            try:
+                os.chroot('!@$#!#%$#^#@!#!$$#^')
+            except OSError:
+                return 1
+            return 0
 
-            assert self.interpret(f, []) == 1
+        assert self.interpret(f, []) == 1
 
     def test_os_wstar(self):
         from rpython.rlib import rposix
@@ -221,84 +221,84 @@
                 res = self.interpret(fun, [value])
                 assert res == fun(value)
 
-    if hasattr(os, 'getgroups'):
-        def test_getgroups(self):
-            def f():
-                return os.getgroups()
-            ll_a = self.interpret(f, [])
-            assert self.ll_to_list(ll_a) == f()
+    @py.test.mark.skipif("not hasattr(os, 'getgroups')")
+    def test_getgroups(self):
+        def f():
+            return os.getgroups()
+        ll_a = self.interpret(f, [])
+        assert self.ll_to_list(ll_a) == f()
 
-    if hasattr(os, 'setgroups'):
-        def test_setgroups(self):
-            def f():
-                try:
-                    os.setgroups(os.getgroups())
-                except OSError:
-                    pass
-            self.interpret(f, [])
+    @py.test.mark.skipif("not hasattr(os, 'setgroups')")
+    def test_setgroups(self):
+        def f():
+            try:
+                os.setgroups(os.getgroups())
+            except OSError:
+                pass
+        self.interpret(f, [])
 
-    if hasattr(os, 'initgroups'):
-        def test_initgroups(self):
-            def f():
-                try:
-                    os.initgroups('sUJJeumz', 4321)
-                except OSError:
-                    return 1
-                return 0
-            res = self.interpret(f, [])
-            assert res == 1
+    @py.test.mark.skipif("not hasattr(os, 'initgroups')")
+    def test_initgroups(self):
+        def f():
+            try:
+                os.initgroups('sUJJeumz', 4321)
+            except OSError:
+                return 1
+            return 0
+        res = self.interpret(f, [])
+        assert res == 1
 
-    if hasattr(os, 'tcgetpgrp'):
-        def test_tcgetpgrp(self):
-            def f(fd):
-                try:
-                    return os.tcgetpgrp(fd)
-                except OSError:
-                    return 42
-            res = self.interpret(f, [9999])
-            assert res == 42
+    @py.test.mark.skipif("not hasattr(os, 'tcgetpgrp')")
+    def test_tcgetpgrp(self):
+        def f(fd):
+            try:
+                return os.tcgetpgrp(fd)
+            except OSError:
+                return 42
+        res = self.interpret(f, [9999])
+        assert res == 42
 
-    if hasattr(os, 'tcsetpgrp'):
-        def test_tcsetpgrp(self):
-            def f(fd, pgrp):
-                try:
-                    os.tcsetpgrp(fd, pgrp)
-                except OSError:
-                    return 1
-                return 0
-            res = self.interpret(f, [9999, 1])
-            assert res == 1
+    @py.test.mark.skipif("not hasattr(os, 'tcsetpgrp')")
+    def test_tcsetpgrp(self):
+        def f(fd, pgrp):
+            try:
+                os.tcsetpgrp(fd, pgrp)
+            except OSError:
+                return 1
+            return 0
+        res = self.interpret(f, [9999, 1])
+        assert res == 1
 
-    if hasattr(os, 'getresuid'):
-        def test_getresuid(self):
-            def f():
-                a, b, c = os.getresuid()
-                return a + b * 37 + c * 1291
-            res = self.interpret(f, [])
+    @py.test.mark.skipif("not hasattr(os, 'getresuid')")
+    def test_getresuid(self):
+        def f():
             a, b, c = os.getresuid()
-            assert res == a + b * 37 + c * 1291
+            return a + b * 37 + c * 1291
+        res = self.interpret(f, [])
+        a, b, c = os.getresuid()
+        assert res == a + b * 37 + c * 1291
 
-    if hasattr(os, 'getresgid'):
-        def test_getresgid(self):
-            def f():
-                a, b, c = os.getresgid()
-                return a + b * 37 + c * 1291
-            res = self.interpret(f, [])
+    @py.test.mark.skipif("not hasattr(os, 'getresgid')")
+    def test_getresgid(self):
+        def f():
             a, b, c = os.getresgid()
-            assert res == a + b * 37 + c * 1291
+            return a + b * 37 + c * 1291
+        res = self.interpret(f, [])
+        a, b, c = os.getresgid()
+        assert res == a + b * 37 + c * 1291
 
-    if hasattr(os, 'setresuid'):
-        def test_setresuid(self):
-            def f():
-                a, b, c = os.getresuid()
-                a = (a + 1) - 1
-                os.setresuid(a, b, c)
-            self.interpret(f, [])
+    @py.test.mark.skipif("not hasattr(os, 'setresuid')")
+    def test_setresuid(self):
+        def f():
+            a, b, c = os.getresuid()
+            a = (a + 1) - 1
+            os.setresuid(a, b, c)
+        self.interpret(f, [])
 
-    if hasattr(os, 'setresgid'):
-        def test_setresgid(self):
-            def f():
-                a, b, c = os.getresgid()
-                a = (a + 1) - 1
-                os.setresgid(a, b, c)
-            self.interpret(f, [])
+    @py.test.mark.skipif("not hasattr(os, 'setresgid')")
+    def test_setresgid(self):
+        def f():
+            a, b, c = os.getresgid()
+            a = (a + 1) - 1
+            os.setresgid(a, b, c)
+        self.interpret(f, [])


More information about the pypy-commit mailing list