Author: Alex Gaynor <[email protected]>
Branch:
Changeset: r45065:cca2ff5601ef
Date: 2011-06-22 16:29 -0700
http://bitbucket.org/pypy/pypy/changeset/cca2ff5601ef/
Log: unicodegetitem can't return negative numbers.
diff --git a/pypy/jit/metainterp/optimizeopt/intbounds.py
b/pypy/jit/metainterp/optimizeopt/intbounds.py
--- a/pypy/jit/metainterp/optimizeopt/intbounds.py
+++ b/pypy/jit/metainterp/optimizeopt/intbounds.py
@@ -23,7 +23,7 @@
def reconstruct_for_next_iteration(self, optimizer, valuemap):
assert self.posponedop is None
- return self
+ return self
def propagate_forward(self, op):
if op.is_ovf():
@@ -194,7 +194,7 @@
# Synthesize the reverse ops for optimize_default to reuse
self.pure(rop.INT_ADD, [op.result, op.getarg(1)], op.getarg(0))
self.pure(rop.INT_SUB, [op.getarg(0), op.result], op.getarg(1))
-
+
def optimize_INT_MUL_OVF(self, op):
v1 = self.getvalue(op.getarg(0))
@@ -292,6 +292,11 @@
v1.intbound.make_ge(IntLowerBound(0))
v1.intbound.make_lt(IntUpperBound(256))
+ def optimize_UNICODEGETITEM(self, op):
+ self.emit_operation(op)
+ v1 = self.getvalue(op.result)
+ v1.intbound.make_ge(IntLowerBound(0))
+
def make_int_lt(self, box1, box2):
v1 = self.getvalue(box1)
v2 = self.getvalue(box2)
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -5311,7 +5311,7 @@
"""
self.optimize_strunicode_loop(ops, expected)
- def test_strgetitem_small(self):
+ def test_strgetitem_bounds(self):
ops = """
[p0, i0]
i1 = strgetitem(p0, i0)
@@ -5328,6 +5328,21 @@
"""
self.optimize_loop(ops, expected)
+ def test_unicodegetitem_bounds(self):
+ ops = """
+ [p0, i0]
+ i1 = unicodegetitem(p0, i0)
+ i2 = int_lt(i1, 0)
+ guard_false(i2) []
+ jump(p0, i0)
+ """
+ expected = """
+ [p0, i0]
+ i1 = unicodegetitem(p0, i0)
+ jump(p0, i0)
+ """
+ self.optimize_loop(ops, expected)
+
def test_strlen_positive(self):
ops = """
[p0]
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit