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