Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r79888:68b5a3425c05
Date: 2015-09-29 10:03 +0200
http://bitbucket.org/pypy/pypy/changeset/68b5a3425c05/

Log:    Tweaks to reduce the number of checks with the JIT, notably in
        'lst[a:]'.

diff --git a/pypy/objspace/std/sliceobject.py b/pypy/objspace/std/sliceobject.py
--- a/pypy/objspace/std/sliceobject.py
+++ b/pypy/objspace/std/sliceobject.py
@@ -5,6 +5,7 @@
 from pypy.interpreter.error import OperationError
 from pypy.interpreter.typedef import GetSetProperty, TypeDef
 from rpython.rlib.objectmodel import specialize
+from rpython.rlib import jit
 
 
 class W_SliceObject(W_Root):
@@ -234,10 +235,16 @@
     assert length >= 0
     if start < 0:
         start = 0
+    # hack for the JIT, for slices with no end specified:
+    # this avoids the two comparisons that follow
+    if jit.isconstant(stop) and stop == sys.maxint:
+        return start, length
     if stop < start:
         stop = start
     if stop > length:
         stop = length
-        if start > length:
+        if jit.isconstant(start) and start == 0:
+            pass    # no need to do the following check here
+        elif start > length:
             start = length
     return start, stop
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to