[pypy-svn] r21868 - in pypy/dist/pypy/translator: . test

cfbolz at codespeak.net cfbolz at codespeak.net
Tue Jan 10 12:16:17 CET 2006


Author: cfbolz
Date: Tue Jan 10 12:16:16 2006
New Revision: 21868

Modified:
   pypy/dist/pypy/translator/simplify.py
   pypy/dist/pypy/translator/test/test_simplify.py
Log:
another attempt to fix get_graph, this time with tests :-(


Modified: pypy/dist/pypy/translator/simplify.py
==============================================================================
--- pypy/dist/pypy/translator/simplify.py	(original)
+++ pypy/dist/pypy/translator/simplify.py	Tue Jan 10 12:16:16 2006
@@ -20,16 +20,20 @@
         return None
     try:
         callable = f._obj._callable
-        #external function calls don't have a real graph
+        # external function calls don't have a real graph
         if getattr(callable, "suggested_primitive", False):
             return None
-        return graphof(translator, callable)
-    except AttributeError, KeyError:
-        pass
+    except (AttributeError, KeyError, AssertionError):
+        return None
     try:
         return f._obj.graph
     except AttributeError:
         return None
+    try:
+        callable = f._obj._callable
+        return graphof(translator, callable)
+    except (AttributeError, KeyError, AssertionError):
+        return None
 
 
 # ____________________________________________________________

Modified: pypy/dist/pypy/translator/test/test_simplify.py
==============================================================================
--- pypy/dist/pypy/translator/test/test_simplify.py	(original)
+++ pypy/dist/pypy/translator/test/test_simplify.py	Tue Jan 10 12:16:16 2006
@@ -1,12 +1,14 @@
 from pypy.translator.translator import TranslationContext, graphof
 from pypy.translator.backendopt.all import backend_optimizations
+from pypy.translator.simplify import get_graph
 from pypy.objspace.flow.model import traverse, Block
 
-def translate(func, argtypes):
+def translate(func, argtypes, backend_optimize=True):
     t = TranslationContext()
     t.buildannotator().build_types(func, argtypes)
     t.buildrtyper().specialize()
-    backend_optimizations(t)
+    if backend_optimize:
+        backend_optimizations(t)
     return graphof(t, func), t
 
 def test_remove_direct_call_without_side_effects():
@@ -94,3 +96,34 @@
     graph = TranslationContext().buildflowgraph(g)
     for block in graph.iterblocks():
         assert len(block.inputargs) <= 2   # at most 'pc' and 'code'
+
+def test_get_graph():
+    import os
+    def list_basic_ops(i, j):
+        l = [1,2,3]
+        l.insert(0, 42)
+        del l[1]
+        l.append(i)
+        listlen = len(l)
+        l.extend(l)
+        del l[listlen:]
+        l += [5,6]
+        l[1] = i
+        return l[j]
+    def external_function():
+        return os.system("ls")
+    graph, t = translate(list_basic_ops, [int, int], False) 
+    for block in graph.iterblocks():
+        for op in block.operations:
+            if op.opname == "direct_call":
+                print op
+                graph = get_graph(op.args[0], t)
+                assert graph is not None
+    graph, t = translate(external_function, [], False) 
+    for block in graph.iterblocks():
+        for op in block.operations:
+            if op.opname == "direct_call":
+                print op
+                graph = get_graph(op.args[0], t)
+                assert graph is None
+



More information about the Pypy-commit mailing list