[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