From c356d6a91b0488a303ab0a9d500098b20fad052c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Tue, 23 Nov 2010 14:27:25 +0000 Subject: [PATCH] Cleanup base visitor. --- base.py | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/base.py b/base.py index 3a801c1..e427bd4 100644 --- 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): -- 2.43.0