00001
00002
00003 #ifndef lestes__lang__cplus__sem__or_g_hh__included
00004 #define lestes__lang__cplus__sem__or_g_hh__included
00005
00006 #include <lestes/common.hh>
00007 #include <lestes/std/list.hh>
00008 #include <lestes/std/set.hh>
00009 #include <lestes/lang/cplus/sem/ss_decl_name_visitor.v.g.hh>
00010
00011 #include <lestes/std/objectize_macros.hh>
00012 package(lestes);
00013 package(std);
00014 class object;
00015 end_package(std);
00016 end_package(lestes);
00017
00018 package(lestes);
00019 package(std);
00020 class source_location;
00021 end_package(std);
00022 end_package(lestes);
00023
00024 package(lestes);
00025 package(lang);
00026 package(cplus);
00027 package(sem);
00028
00029
00030 class ss_declaration;
00031 class ss_expression;
00032 class ss_builtin_operator_declaration;
00033 class ss_function_declaration;
00034 class ss_declaration_time;
00035 class ss_decl_seq;
00036 class or_or_functional;
00037 class or_builtin_operator_declaration_creator;
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 class or_builtin_operator_declaration_creator : public ss_decl_name_visitor {
00056 public:
00057
00058 ptr< ss_decl_seq > builtin_op_decl_seq_get() const;
00059
00060
00061 void builtin_op_decl_seq_set(const ptr< ss_decl_seq > &);
00062
00063 void construct_builtin_op(ptr < ss_decl_name > op, ptr < ::lestes::std::list< srp< ss_type > > > types, ptr < ss_type > return_type);
00064
00065 static ptr< or_builtin_operator_declaration_creator > instance();
00066
00067 template <typename op, typename type1> void add_vq_ref_vq_ref();
00068
00069 template <typename op, typename type1> void add_nonref_vq_ref_int();
00070
00071 template <typename op, typename type1> void add_vq_ptr_ref_vq_ptr_ref();
00072
00073 template <typename op, typename type1> void add_vq_ptr_nonref_vq_ptr_ref_int();
00074
00075 template <typename op, typename type1> void add_ref_ptr();
00076
00077 template <typename op, typename type1> void add_ref_ptr_const();
00078
00079 template <typename op> void add_ptr_ptr();
00080
00081 template <typename op, typename type1, typename type2> void add_nonref_nonref();
00082
00083 template <typename op, typename type1, typename type2, typename type3> void add_nonref_nonref_nonref();
00084
00085 template <typename op, typename type1, typename type2> void add_vq_ref_vq_ref_nonref();
00086
00087 template <typename op, typename type1, typename type2> void add_vq_ref_vq_ref_nonref_REF();
00088
00089 template <typename op, typename type1, typename type2, typename type3, typename type4> void add_nonref_nonref_nonref_nonref();
00090
00091 template <typename op, typename type1> void add_ptr_ptr_int();
00092
00093 template <typename op, typename type1> void add_ptr_int_ptr();
00094
00095 template <typename op, typename type1> void add_int_ptr_ptr();
00096
00097 template <typename op, typename type1> void add_bool_ptr_ptr();
00098
00099 template <typename op, typename type1> void add_vq_ptr_ref_vq_ptr_ref_ptr();
00100
00101 template <typename op, typename type1> void add_vq_ptr_ref_vq_ptr_ref_int();
00102
00103 virtual void visit_ss_ordinary_name(ptr< ::lestes::lang::cplus::sem::ss_ordinary_name > );
00104
00105 virtual void visit_ss_conversion_name(ptr< ::lestes::lang::cplus::sem::ss_conversion_name > );
00106
00107 virtual void visit_ss_dummy_name(ptr< ::lestes::lang::cplus::sem::ss_dummy_name > );
00108
00109 virtual void visit_ss_operator_new(ptr< ::lestes::lang::cplus::sem::ss_operator_new > );
00110
00111 virtual void visit_ss_operator_delete(ptr< ::lestes::lang::cplus::sem::ss_operator_delete > );
00112
00113 virtual void visit_ss_operator_new_array(ptr< ::lestes::lang::cplus::sem::ss_operator_new_array > );
00114
00115 virtual void visit_ss_operator_delete_array(ptr< ::lestes::lang::cplus::sem::ss_operator_delete_array > );
00116
00117 virtual void visit_ss_operator_add(ptr< ::lestes::lang::cplus::sem::ss_operator_add > );
00118
00119 virtual void visit_ss_operator_sub(ptr< ::lestes::lang::cplus::sem::ss_operator_sub > );
00120
00121 virtual void visit_ss_operator_mul(ptr< ::lestes::lang::cplus::sem::ss_operator_mul > );
00122
00123 virtual void visit_ss_operator_div(ptr< ::lestes::lang::cplus::sem::ss_operator_div > );
00124
00125 virtual void visit_ss_operator_mod(ptr< ::lestes::lang::cplus::sem::ss_operator_mod > );
00126
00127 virtual void visit_ss_operator_bxor(ptr< ::lestes::lang::cplus::sem::ss_operator_bxor > );
00128
00129 virtual void visit_ss_operator_band(ptr< ::lestes::lang::cplus::sem::ss_operator_band > );
00130
00131 virtual void visit_ss_operator_bor(ptr< ::lestes::lang::cplus::sem::ss_operator_bor > );
00132
00133 virtual void visit_ss_operator_bnot(ptr< ::lestes::lang::cplus::sem::ss_operator_bnot > );
00134
00135 virtual void visit_ss_operator_lnot(ptr< ::lestes::lang::cplus::sem::ss_operator_lnot > );
00136
00137 virtual void visit_ss_operator_assign(ptr< ::lestes::lang::cplus::sem::ss_operator_assign > );
00138
00139 virtual void visit_ss_operator_assign_add(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_add > );
00140
00141 virtual void visit_ss_operator_assign_sub(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_sub > );
00142
00143 virtual void visit_ss_operator_assign_mul(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_mul > );
00144
00145 virtual void visit_ss_operator_assign_div(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_div > );
00146
00147 virtual void visit_ss_operator_assign_mod(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_mod > );
00148
00149 virtual void visit_ss_operator_assign_bxor(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_bxor > );
00150
00151 virtual void visit_ss_operator_assign_band(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_band > );
00152
00153 virtual void visit_ss_operator_assign_bor(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_bor > );
00154
00155 virtual void visit_ss_operator_assign_shl(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_shl > );
00156
00157 virtual void visit_ss_operator_assign_shr(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_shr > );
00158
00159 virtual void visit_ss_operator_shr(ptr< ::lestes::lang::cplus::sem::ss_operator_shr > );
00160
00161 virtual void visit_ss_operator_shl(ptr< ::lestes::lang::cplus::sem::ss_operator_shl > );
00162
00163 virtual void visit_ss_operator_sbl(ptr< ::lestes::lang::cplus::sem::ss_operator_sbl > );
00164
00165 virtual void visit_ss_operator_sbg(ptr< ::lestes::lang::cplus::sem::ss_operator_sbg > );
00166
00167 virtual void visit_ss_operator_sbng(ptr< ::lestes::lang::cplus::sem::ss_operator_sbng > );
00168
00169 virtual void visit_ss_operator_sbnl(ptr< ::lestes::lang::cplus::sem::ss_operator_sbnl > );
00170
00171 virtual void visit_ss_operator_sbe(ptr< ::lestes::lang::cplus::sem::ss_operator_sbe > );
00172
00173 virtual void visit_ss_operator_sbne(ptr< ::lestes::lang::cplus::sem::ss_operator_sbne > );
00174
00175 virtual void visit_ss_operator_land(ptr< ::lestes::lang::cplus::sem::ss_operator_land > );
00176
00177 virtual void visit_ss_operator_lor(ptr< ::lestes::lang::cplus::sem::ss_operator_lor > );
00178
00179 virtual void visit_ss_operator_inc(ptr< ::lestes::lang::cplus::sem::ss_operator_inc > );
00180
00181 virtual void visit_ss_operator_dec(ptr< ::lestes::lang::cplus::sem::ss_operator_dec > );
00182
00183 virtual void visit_ss_operator_comma(ptr< ::lestes::lang::cplus::sem::ss_operator_comma > );
00184
00185 virtual void visit_ss_operator_access(ptr< ::lestes::lang::cplus::sem::ss_operator_access > );
00186
00187 virtual void visit_ss_operator_access_member(ptr< ::lestes::lang::cplus::sem::ss_operator_access_member > );
00188
00189 virtual void visit_ss_operator_function_call(ptr< ::lestes::lang::cplus::sem::ss_operator_function_call > );
00190
00191 virtual void visit_ss_operator_array(ptr< ::lestes::lang::cplus::sem::ss_operator_array > );
00192
00193 virtual void visit_ss_operator_ternary(ptr< ::lestes::lang::cplus::sem::ss_operator_ternary > );
00194
00195
00196
00197
00198 virtual ptr<reflection_list> reflection_get() const;
00199
00200 virtual ptr<field_list_list> field_values_get() const;
00201
00202 protected:
00203
00204 or_builtin_operator_declaration_creator (
00205 ptr< ss_decl_seq > a__or_builtin_operator_declaration_creator__builtin_op_decl_seq);
00206
00207
00208 virtual void gc_mark();
00209
00210 private:
00211 srp< ss_decl_seq > builtin_op_decl_seq;
00212 static ptr< or_builtin_operator_declaration_creator > the_instance;
00213 static ptr<reflection_list> reflection;
00214
00215 };
00216
00217
00218
00219
00220
00221 end_package(sem);
00222 end_package(cplus);
00223 end_package(lang);
00224 end_package(lestes);
00225
00226 #endif // lestes__lang__cplus__sem__or_g_hh__included