]> git.cworth.org Git - apitrace/commitdiff
Cleanup base visitor.
authorJosé Fonseca <jfonseca@vmware.com>
Tue, 23 Nov 2010 14:27:25 +0000 (14:27 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Tue, 23 Nov 2010 14:27:25 +0000 (14:27 +0000)
base.py

diff --git a/base.py b/base.py
index 3a801c1e8a18dfdf1d8234ad5f29fabaf56fdb1e..e427bd4fa0c93102ddeacb6d154685bebdc15b9c 100644 (file)
--- a/base.py
+++ b/base.py
@@ -37,45 +37,58 @@ class Visitor:
     def visit(self, type, *args, **kwargs):
         return type.visit(self, *args, **kwargs)
 
-    __call__ = visit
+    def visit_void(self, void, *args, **kwargs):
+        raise NotImplementedError
 
-    def visit_void(self, type, *args, **kwargs):
+    def visit_literal(self, literal, *args, **kwargs):
         raise NotImplementedError
 
-    def visit_literal(self, type, *args, **kwargs):
+    def visit_string(self, string, *args, **kwargs):
         raise NotImplementedError
 
-    def visit_string(self, type, *args, **kwargs):
+    def visit_const(self, const, *args, **kwargs):
         raise NotImplementedError
 
-    def visit_const(self, type, *args, **kwargs):
+    def visit_struct(self, struct, *args, **kwargs):
         raise NotImplementedError
 
-    def visit_struct(self, type, *args, **kwargs):
+    def visit_array(self, array, *args, **kwargs):
         raise NotImplementedError
 
-    def visit_array(self, type, *args, **kwargs):
+    def visit_blob(self, blob, *args, **kwargs):
         raise NotImplementedError
 
-    def visit_blob(self, type, *args, **kwargs):
+    def visit_enum(self, enum, *args, **kwargs):
         raise NotImplementedError
 
-    def visit_enum(self, type, *args, **kwargs):
+    def visit_bitmask(self, bitmask, *args, **kwargs):
         raise NotImplementedError
 
-    def visit_bitmask(self, type, *args, **kwargs):
+    def visit_pointer(self, pointer, *args, **kwargs):
         raise NotImplementedError
 
-    def visit_pointer(self, type, *args, **kwargs):
+    def visit_alias(self, alias, *args, **kwargs):
         raise NotImplementedError
 
-    def visit_alias(self, type, *args, **kwargs):
+    def visit_opaque(self, opaque, *args, **kwargs):
         raise NotImplementedError
 
-    def visit_opaque(self, type, *args, **kwargs):
+    def visit_interface(self, interface, *args, **kwargs):
         raise NotImplementedError
 
 
+class OnceVisitor(Visitor):
+
+    def __init__(self):
+        self.__visited = set()
+
+    def visit(self, type, *args, **kwargs):
+        if type not in self.__visited:
+            self.__visited.add(type)
+            return type.visit(self, *args, **kwargs)
+        return None
+
+
 class Rebuilder(Visitor):
 
     def visit_void(self, void):