[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