[pypy-svn] r61940 - in pypy/branch/pyjitpl5/pypy/jit/metainterp: . test
fijal at codespeak.net
fijal at codespeak.net
Sun Feb 15 17:15:43 CET 2009
Author: fijal
Date: Sun Feb 15 17:15:42 2009
New Revision: 61940
Modified:
pypy/branch/pyjitpl5/pypy/jit/metainterp/optimize.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_tlc.py
Log:
fix a bit of bugs
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/optimize.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/optimize.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/optimize.py Sun Feb 15 17:15:42 2009
@@ -284,6 +284,7 @@
if ofs >= field:
instnode.curfields[ofs + 1] = node
instnode.curfields[field] = fieldnode
+ instnode.known_length += 1
self.dependency_graph.append((instnode, fieldnode))
def find_nodes(self):
@@ -344,6 +345,8 @@
if (isinstance(fieldbox, ConstInt) or
self.nodes[op.args[2]].const):
field = self.getsource(fieldbox).getint()
+ if field < 0:
+ field = instnode.known_length - field
box = op.results[0]
self.find_nodes_getfield(instnode, field, box)
continue
@@ -365,6 +368,8 @@
fieldbox = self.getsource(op.args[2])
assert isinstance(fieldbox, Const) or fieldbox.const
field = fieldbox.getint()
+ if field < 0:
+ field = instnode.known_length - field
self.find_nodes_insert(instnode, field,
self.getnode(op.args[3]))
continue
@@ -378,16 +383,20 @@
continue
elif opname == 'len' or opname == 'listnonzero':
instnode = self.getnode(op.args[1])
- assert instnode.known_length != -1
- lgtbox = op.results[0].constbox()
- self.nodes[op.results[0]] = InstanceNode(lgtbox, const=True)
- continue
+ if not instnode.escaped:
+ assert instnode.known_length != -1
+ lgtbox = op.results[0].constbox()
+ self.nodes[op.results[0]] = InstanceNode(lgtbox, const=True)
+ continue
elif opname == 'setitem':
instnode = self.getnode(op.args[1])
fieldbox = op.args[2]
if (isinstance(fieldbox, ConstInt)
or self.nodes[op.args[2]].const):
field = self.getsource(fieldbox).getint()
+ if field < 0:
+ field = instnode.known_length - field
+ assert field < instnode.known_length
self.find_nodes_setfield(instnode, field,
self.getnode(op.args[3]))
continue
@@ -534,6 +543,8 @@
def optimize_getfield(self, instnode, ofs, box):
if instnode.virtual or instnode.virtualized:
+ if ofs < 0:
+ ofs = instnode.known_length - ofs
assert ofs in instnode.curfields
return True # this means field is never actually
elif ofs in instnode.cleanfields:
@@ -558,6 +569,7 @@
if ofs >= field:
instnode.curfields[ofs + 1] = node
instnode.curfields[field] = valuenode
+ instnode.known_length += 1
def optimize_loop(self):
self.ready_results = {}
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_tlc.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_tlc.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_tlc.py Sun Feb 15 17:15:42 2009
@@ -44,7 +44,7 @@
assert res == 42
def test_accumulator(self):
- py.test.skip("unsupported yet")
+ py.test.skip("X")
path = py.path.local(tlc.__file__).dirpath('accumulator.tlc.src')
code = path.read()
res = self.exec_code(code, 20)
More information about the Pypy-commit
mailing list