[pypy-svn] rev 2059 - in pypy/trunk/src/pypy/objspace/flow: . test
hpk at codespeak.net
hpk at codespeak.net
Sat Oct 25 20:18:04 CEST 2003
Author: hpk
Date: Sat Oct 25 20:18:03 2003
New Revision: 2059
Modified:
pypy/trunk/src/pypy/objspace/flow/model.py
pypy/trunk/src/pypy/objspace/flow/test/test_model.py
Log:
- nicer error messages
- allow a visitor to contain only partial visit_* and try
visit() before falling back to calling the visitor object itself
(which is needed for allowing functions ...)
Modified: pypy/trunk/src/pypy/objspace/flow/model.py
==============================================================================
--- pypy/trunk/src/pypy/objspace/flow/model.py (original)
+++ pypy/trunk/src/pypy/objspace/flow/model.py Sat Oct 25 20:18:03 2003
@@ -125,8 +125,9 @@
if consume:
break
else:
- consume = self.visitor
+ consume = getattr(self.visitor, 'visit', self.visitor)
+ assert callable(consume), "visitor not found for %r on %r" % (cls, self.visitor)
self.seen[id(node)] = consume(node)
# recurse
Modified: pypy/trunk/src/pypy/objspace/flow/test/test_model.py
==============================================================================
--- pypy/trunk/src/pypy/objspace/flow/test/test_model.py (original)
+++ pypy/trunk/src/pypy/objspace/flow/test/test_model.py Sat Oct 25 20:18:03 2003
@@ -47,6 +47,28 @@
self.assertEquals(v.graph, graph)
self.assertEquals(v.links[0], graph.startblock.exits[0])
+ def test_partial_class(self):
+ graph = self.getflow(self.simplefunc)
+
+ class MyVisitor:
+ def __init__(self):
+ self.blocks = []
+ self.links = []
+
+ def visit_FunctionGraph(self, graph):
+ self.graph = graph
+ def visit_Block(self, block):
+ self.blocks.append(block)
+ def visit(self, link):
+ self.links.append(link)
+
+ v = MyVisitor()
+ traverse(v, graph)
+ self.assertEquals(len(v.blocks), 2)
+ self.assertEquals(len(v.links), 1)
+ self.assertEquals(v.graph, graph)
+ self.assertEquals(v.links[0], graph.startblock.exits[0])
+
def loop(x):
x = abs(x)
while x:
More information about the Pypy-commit
mailing list