[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