1 /*
2  * Copyright 2006-2008 The FLWOR Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #pragma once
17 #ifndef ZORBA_ABSTRACT_EXPR_VISITOR_H
18 #define ZORBA_ABSTRACT_EXPR_VISITOR_H
19 
20 #include <zorba/config.h>
21 #include "common/shared_types.h"
22 #include "compiler/expression/expr_visitor.h"
23 
24 /*______________________________________________________________________
25 |
26 |  Design note: Visitor pattern.  See, for example:
27 |  "Modern C++ Design" by Andrei Alexandrescu,
28 |  Addison Wesley (2001), Chapter 10.
29 |_______________________________________________________________________*/
30 
31 namespace zorba
32 {
33 
34 class abstract_expr_visitor : public expr_visitor
35 {
36 public:
~abstract_expr_visitor()37   virtual ~abstract_expr_visitor() {}
38 
39 public:
40 
41 #define EXPR_VISITOR_METHODS( EXPR_CLASS )                  \
42   virtual bool begin_visit( EXPR_CLASS& ) { return true; }  \
43   virtual void end_visit( EXPR_CLASS& ) { }
44 
45   EXPR_VISITOR_METHODS (attr_expr);
46   EXPR_VISITOR_METHODS (axis_step_expr);
47   EXPR_VISITOR_METHODS (case_clause);
48   EXPR_VISITOR_METHODS (castable_expr);
49   EXPR_VISITOR_METHODS (cast_expr);
50   EXPR_VISITOR_METHODS (const_expr);
51   EXPR_VISITOR_METHODS (doc_expr);
52   EXPR_VISITOR_METHODS (elem_expr);
53   EXPR_VISITOR_METHODS (pi_expr);
54   EXPR_VISITOR_METHODS (text_expr);
55 #ifdef ZORBA_WITH_JSON
56   EXPR_VISITOR_METHODS (json_object_expr);
57   EXPR_VISITOR_METHODS (json_array_expr);
58 #endif
59 
60   EXPR_VISITOR_METHODS (expr);
61   EXPR_VISITOR_METHODS (extension_expr);
62   EXPR_VISITOR_METHODS (flwor_expr);
63   EXPR_VISITOR_METHODS (fo_expr);
64 #ifndef ZORBA_NO_FULL_TEXT
65   EXPR_VISITOR_METHODS (ftcontains_expr);
66 #endif /* ZORBA_NO_FULL_TEXT */
67   EXPR_VISITOR_METHODS (if_expr);
68   EXPR_VISITOR_METHODS (instanceof_expr);
69   EXPR_VISITOR_METHODS (match_expr);
70   EXPR_VISITOR_METHODS (name_cast_expr);
71   EXPR_VISITOR_METHODS (order_expr);
72   EXPR_VISITOR_METHODS (order_modifier);
73 
74   EXPR_VISITOR_METHODS (promote_expr);
75   EXPR_VISITOR_METHODS (relpath_expr);
76   EXPR_VISITOR_METHODS (treat_expr);
77   EXPR_VISITOR_METHODS (validate_expr);
78   EXPR_VISITOR_METHODS (var_expr);
79 
80   EXPR_VISITOR_METHODS(trycatch_expr);
81   EXPR_VISITOR_METHODS(function_item_expr);
82   EXPR_VISITOR_METHODS(dynamic_function_invocation_expr);
83 
84   EXPR_VISITOR_METHODS (delete_expr);
85   EXPR_VISITOR_METHODS (insert_expr);
86   EXPR_VISITOR_METHODS (rename_expr);
87   EXPR_VISITOR_METHODS (replace_expr);
88   EXPR_VISITOR_METHODS (transform_expr);
89 
90   EXPR_VISITOR_METHODS (block_expr);
91   EXPR_VISITOR_METHODS (apply_expr);
92   EXPR_VISITOR_METHODS (var_decl_expr);
93   EXPR_VISITOR_METHODS (var_set_expr);
94   EXPR_VISITOR_METHODS (exit_expr);
95   EXPR_VISITOR_METHODS (exit_catcher_expr);
96   EXPR_VISITOR_METHODS (flowctl_expr);
97   EXPR_VISITOR_METHODS (while_expr);
98 
99   EXPR_VISITOR_METHODS (eval_expr);
100   EXPR_VISITOR_METHODS (debugger_expr);
101   EXPR_VISITOR_METHODS (wrapper_expr);
102   EXPR_VISITOR_METHODS (function_trace_expr);
103 
104 #undef EXPR_VISITOR_METHODS
105 
106 };
107 
108 } /* namespace zorba */
109 #endif /* ZORBA_ABSTRACT_EXPR_VISITOR_H */
110 /* vim:set et sw=2 ts=2: */
111