LRDE Tiger Compiler  1.34a $Id: 7fef12e1f5fa43449d667a0eec1d837c40fc1202 $
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
default-visitor.hh
Go to the documentation of this file.
1 
6 #ifndef AST_DEFAULT_VISITOR_HH
7 # define AST_DEFAULT_VISITOR_HH
8 
9 # include <ast/visitor.hh>
10 
11 namespace ast
12 {
29  template <template <typename> class Const>
30  class GenDefaultVisitor : public virtual GenVisitor<Const>
31  {
32  public:
35 
36  // Import overloaded \c operator() methods.
37  using super_type::operator();
38 
41 
44  virtual ~GenDefaultVisitor();
47  /* We cannot simply use `using super_type::operator()' here,
48  otherwise the linker would complain about missing symbols for
49  these methods:
50 
51  GenVisitor<id_traits>::operator() (ast::MethodDec&)
52  GenVisitor<id_traits>::operator() (ast::MethodCallExp&)
53 
54  This behavior seems to come from the mix between diamond
55  inheritance and templates. We redefine the following operator
56  (delegating to GenVisitor's operator()) as a workaround. */
57  virtual void operator()(typename Const<Ast>::type& e);
58 
61  virtual void operator()(typename Const<SimpleVar>::type& e) override;
62  virtual void operator()(typename Const<FieldVar>::type& e) override;
63  virtual void operator()(typename Const<SubscriptVar>::type& e) override;
64  virtual void operator()(typename Const<CastVar>::type& e) override;
70  virtual void operator()(typename Const<NilExp>::type& e) override;
71  virtual void operator()(typename Const<IntExp>::type& e) override;
72  virtual void operator()(typename Const<StringExp>::type& e) override;
73  virtual void operator()(typename Const<CallExp>::type& e) override;
74  virtual void operator()(typename Const<OpExp>::type& e) override;
75  virtual void operator()(typename Const<RecordExp>::type& e) override;
76  virtual void operator()(typename Const<SeqExp>::type& e) override;
77  virtual void operator()(typename Const<AssignExp>::type& e) override;
78  virtual void operator()(typename Const<IfExp>::type& e) override;
79  virtual void operator()(typename Const<WhileExp>::type& e) override;
80  virtual void operator()(typename Const<ForExp>::type& e) override;
81  virtual void operator()(typename Const<BreakExp>::type&) override;
82  virtual void operator()(typename Const<LetExp>::type& e) override;
83  virtual void operator()(typename Const<ArrayExp>::type& e) override;
84  virtual void operator()(typename Const<CastExp>::type& e) override;
85  virtual void operator()(typename Const<FieldInit>::type& e) override;
101 
102  virtual void operator()(typename Const<DecsList>::type& e) override;
103 
105  virtual void operator()(typename Const<Decs>::type& e);
106 
107  template <typename DecsType>
112  void decs_visit(typename Const<DecsType>::type& e);
113 
115  virtual void operator()(typename Const<VarDecs>::type& e) override;
116  virtual void operator()(typename Const<VarDec>::type& e) override;
117 
119  virtual void operator()(typename Const<FunctionDecs>::type& e) override;
120  virtual void operator()(typename Const<FunctionDec>::type& e) override;
121 
123  virtual void operator()(typename Const<TypeDecs>::type& e) override;
124  virtual void operator()(typename Const<TypeDec>::type& e) override;
125 
131  virtual void operator()(typename Const<NameTy>::type& e) override;
132  virtual void operator()(typename Const<RecordTy>::type& e) override;
133  virtual void operator()(typename Const<ArrayTy>::type& e) override;
138  virtual void operator()(typename Const<Field>::type& e) override;
139  };
140 
144 #ifdef SWIG
145  %template() GenVisitor<misc::id_traits>;
147 #endif
149 
150 } // namespace ast
151 
152 # include <ast/default-visitor.hxx>
153 
154 #endif // !AST_DEFAULT_VISITOR_HH