[pypy-svn] r22209 - in pypy/dist/pypy/translator/backendopt: . test
cfbolz at codespeak.net
cfbolz at codespeak.net
Mon Jan 16 11:53:09 CET 2006
Author: cfbolz
Date: Mon Jan 16 11:53:08 2006
New Revision: 22209
Modified:
pypy/dist/pypy/translator/backendopt/escape.py
pypy/dist/pypy/translator/backendopt/test/test_escape.py
Log:
make external functions work that return something on the heap
Modified: pypy/dist/pypy/translator/backendopt/escape.py
==============================================================================
--- pypy/dist/pypy/translator/backendopt/escape.py (original)
+++ pypy/dist/pypy/translator/backendopt/escape.py Mon Jan 16 11:53:08 2006
@@ -280,15 +280,12 @@
def direct_call(self, op, function, *args):
graph = get_graph(op.args[0], self.translation_context)
if graph is None:
- if isonheap(op.result):
- raise NotImplementedError, "can't handle call %s" % (op, )
for arg in args:
if arg is None:
continue
# an external function can change every parameter:
changed = arg.setchanges()
self.handle_changed(changed)
- result = None
funcargs = [None] * len(args)
else:
result, funcargs = self.schedule_function(graph)
Modified: pypy/dist/pypy/translator/backendopt/test/test_escape.py
==============================================================================
--- pypy/dist/pypy/translator/backendopt/test/test_escape.py (original)
+++ pypy/dist/pypy/translator/backendopt/test/test_escape.py Mon Jan 16 11:53:08 2006
@@ -334,7 +334,17 @@
state = adi.getstate(svar)
assert not state.does_escape()
assert state.does_change()
-
+
+def test_extfunc_resultonheap():
+ import os
+ def f(i):
+ s = str(i)
+ return len(s)
+ t, adi, graph = build_adi(f, [float])
+ svar = graph.startblock.operations[0].result
+ state = adi.getstate(svar)
+ assert not state.does_escape()
+
#__________________________________________________________
# malloc removal tests
More information about the Pypy-commit
mailing list