diff -r 2f5618c0039a -r df783da3ebe2 absyntax/visitor.hh --- a/absyntax/visitor.hh Tue Oct 16 18:23:16 2012 +0100 +++ b/absyntax/visitor.hh Tue Oct 16 18:56:03 2012 +0100 @@ -78,32 +78,15 @@ -#define SYM_LIST(class_name_c, ...) \ - virtual void *visit(class_name_c *symbol) = 0; - -#define SYM_TOKEN(class_name_c, ...) \ - virtual void *visit(class_name_c *symbol) = 0; - -#define SYM_REF0(class_name_c, ...) \ - virtual void *visit(class_name_c *symbol) = 0; - -#define SYM_REF1(class_name_c, ref1, ...) \ - virtual void *visit(class_name_c *symbol) = 0; - -#define SYM_REF2(class_name_c, ref1, ref2, ...) \ - virtual void *visit(class_name_c *symbol) = 0; - -#define SYM_REF3(class_name_c, ref1, ref2, ref3, ...) \ - virtual void *visit(class_name_c *symbol) = 0; - -#define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4, ...) \ - virtual void *visit(class_name_c *symbol) = 0; - -#define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5, ...) \ - virtual void *visit(class_name_c *symbol) = 0; - -#define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6, ...) \ - virtual void *visit(class_name_c *symbol) = 0; +#define SYM_LIST(class_name_c, ...) virtual void *visit(class_name_c *symbol) = 0; +#define SYM_TOKEN(class_name_c, ...) virtual void *visit(class_name_c *symbol) = 0; +#define SYM_REF0(class_name_c, ...) virtual void *visit(class_name_c *symbol) = 0; +#define SYM_REF1(class_name_c, ref1, ...) virtual void *visit(class_name_c *symbol) = 0; +#define SYM_REF2(class_name_c, ref1, ref2, ...) virtual void *visit(class_name_c *symbol) = 0; +#define SYM_REF3(class_name_c, ref1, ref2, ref3, ...) virtual void *visit(class_name_c *symbol) = 0; +#define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4, ...) virtual void *visit(class_name_c *symbol) = 0; +#define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5, ...) virtual void *visit(class_name_c *symbol) = 0; +#define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6, ...) virtual void *visit(class_name_c *symbol) = 0; class visitor_c { public: @@ -127,32 +110,15 @@ -#define SYM_LIST(class_name_c, ...) \ - virtual void *visit(class_name_c *symbol); - -#define SYM_TOKEN(class_name_c, ...) \ - virtual void *visit(class_name_c *symbol); - -#define SYM_REF0(class_name_c, ...) \ - virtual void *visit(class_name_c *symbol); - -#define SYM_REF1(class_name_c, ref1, ...) \ - virtual void *visit(class_name_c *symbol); - -#define SYM_REF2(class_name_c, ref1, ref2, ...) \ - virtual void *visit(class_name_c *symbol); - -#define SYM_REF3(class_name_c, ref1, ref2, ref3, ...) \ - virtual void *visit(class_name_c *symbol); - -#define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4, ...) \ - virtual void *visit(class_name_c *symbol); - -#define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5, ...) \ - virtual void *visit(class_name_c *symbol); - -#define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6, ...) \ - virtual void *visit(class_name_c *symbol); +#define SYM_LIST(class_name_c, ...) virtual void *visit(class_name_c *symbol); +#define SYM_TOKEN(class_name_c, ...) virtual void *visit(class_name_c *symbol); +#define SYM_REF0(class_name_c, ...) virtual void *visit(class_name_c *symbol); +#define SYM_REF1(class_name_c, ref1, ...) virtual void *visit(class_name_c *symbol); +#define SYM_REF2(class_name_c, ref1, ref2, ...) virtual void *visit(class_name_c *symbol); +#define SYM_REF3(class_name_c, ref1, ref2, ref3, ...) virtual void *visit(class_name_c *symbol); +#define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4, ...) virtual void *visit(class_name_c *symbol); +#define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5, ...) virtual void *visit(class_name_c *symbol); +#define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6, ...) virtual void *visit(class_name_c *symbol); @@ -167,6 +133,21 @@ + + +class fcall_visitor_c: public visitor_c { + public: + virtual void fcall(symbol_c *symbol) = 0; + + public: + #include "absyntax.def" + +// virtual ~fcall_visitor_c(void); +}; + + + + class iterator_visitor_c: public visitor_c { protected: void *visit_list(list_c *list); @@ -178,6 +159,24 @@ }; + + + +class fcall_iterator_visitor_c: public iterator_visitor_c { + public: + virtual void prefix_fcall(symbol_c *symbol); + virtual void suffix_fcall(symbol_c *symbol); + + public: + #include "absyntax.def" + + virtual ~fcall_iterator_visitor_c(void); +}; + + + + + class search_visitor_c: public visitor_c { protected: void *visit_list(list_c *list); @@ -199,4 +198,11 @@ #undef SYM_REF5 #undef SYM_REF6 + + + + + + + #endif /* _VISITOR_HH */