00001
00002
00003 #ifndef lestes__lang__cplus__sem__sa_deconstruct_spse_g_hh__included
00004 #define lestes__lang__cplus__sem__sa_deconstruct_spse_g_hh__included
00005
00006 #include <lestes/common.hh>
00007 #include <lestes/std/list.hh>
00008 #include <lestes/lang/cplus/sem/as_visitor.v.g.hh>
00009 #include <lestes/lang/cplus/sem/ss_declaration_visitor.v.g.hh>
00010
00011 #include <lestes/std/objectize_macros.hh>
00012 package(lestes);
00013 package(lang);
00014 package(cplus);
00015 package(sem);
00016
00017 enum ss_decl_enum {
00018 INJECTED_CLASS_DECLARATION,
00019 STRUCTURE_DECLARATION,
00020 NAMESPACE_DEFINITION,
00021 OBJECT_DECLARATION,
00022 BITFIELD_DECLARATION,
00023 PARAMETER_DECLARATION,
00024 ENUMERATOR_DECLARATION,
00025 ENUM_DEFINITION,
00026 TYPEDEF_DEFINITION,
00027 USING_DECLARATION,
00028 COMPOUND_STMT_DECLARATION,
00029 FAKE_DECLARATION,
00030 FUNCTION_DECLARATION,
00031 METHOD_DECLARATION,
00032 BUILTIN_OPERATOR_DECLARATION
00033 };
00034
00035
00036 class ss_expression;
00037 class ss_decl_seq;
00038 class ss_sp;
00039 class or_or_functional;
00040 class ss_declaration_visitor;
00041 class ss_decl_to_enum;
00042 class sa_deconstruct_spse;
00043
00044
00045 class ss_decl_to_enum : public ss_declaration_visitor {
00046 public:
00047
00048 ss_decl_enum result_get() const;
00049
00050
00051 void result_set(ss_decl_enum);
00052
00053 virtual void visit_ss_namespace_definition(ptr< ::lestes::lang::cplus::sem::ss_namespace_definition > );
00054
00055 virtual void visit_ss_object_declaration(ptr< ::lestes::lang::cplus::sem::ss_object_declaration > );
00056
00057 virtual void visit_ss_bitfield_declaration(ptr< ::lestes::lang::cplus::sem::ss_bitfield_declaration > );
00058
00059 virtual void visit_ss_parameter_declaration(ptr< ::lestes::lang::cplus::sem::ss_parameter_declaration > );
00060
00061 virtual void visit_ss_fake_declaration(ptr< ::lestes::lang::cplus::sem::ss_fake_declaration > );
00062
00063 virtual void visit_ss_injected_class_declaration(ptr< ::lestes::lang::cplus::sem::ss_injected_class_declaration > );
00064
00065 virtual void visit_ss_enum_definition(ptr< ::lestes::lang::cplus::sem::ss_enum_definition > );
00066
00067 virtual void visit_ss_typedef_definition(ptr< ::lestes::lang::cplus::sem::ss_typedef_definition > );
00068
00069 virtual void visit_ss_enumerator_declaration(ptr< ::lestes::lang::cplus::sem::ss_enumerator_declaration > );
00070
00071 virtual void visit_ss_structure_declaration(ptr< ::lestes::lang::cplus::sem::ss_structure_declaration > );
00072
00073 virtual void visit_ss_function_declaration(ptr< ::lestes::lang::cplus::sem::ss_function_declaration > );
00074
00075 virtual void visit_ss_method_declaration(ptr< ::lestes::lang::cplus::sem::ss_method_declaration > );
00076
00077 virtual void visit_ss_using_declaration(ptr< ::lestes::lang::cplus::sem::ss_using_declaration > );
00078
00079 virtual void visit_ss_compound_stmt_declaration(ptr< ::lestes::lang::cplus::sem::ss_compound_stmt_declaration > );
00080
00081 virtual void visit_ss_builtin_operator_declaration(ptr< ::lestes::lang::cplus::sem::ss_builtin_operator_declaration > );
00082
00083
00084
00085 static ptr< ss_decl_to_enum > create (
00086 ss_decl_enum a__ss_decl_to_enum__result);
00087
00088
00089 static ptr< ss_decl_to_enum > create (
00090 );
00091
00092
00093
00094
00095 virtual ptr<reflection_list> reflection_get() const;
00096
00097 virtual ptr<field_list_list> field_values_get() const;
00098
00099 protected:
00100
00101 ss_decl_to_enum (
00102 ss_decl_enum a__ss_decl_to_enum__result);
00103
00104
00105 virtual void gc_mark();
00106
00107 private:
00108 ss_decl_enum result;
00109 static ptr<reflection_list> reflection;
00110
00111 };
00112
00113
00114 class sa_deconstruct_spse : public as_expr_visitor {
00115 public:
00116
00117 ptr< or_or_functional > result_get() const;
00118
00119
00120 void result_set(const ptr< or_or_functional > &);
00121
00122 template <typename AS, typename OP> void construct_bin_op(ptr< AS > as);
00123
00124 template <typename AS, typename OP> void construct_unary_op_nocreate(ptr< AS > as);
00125
00126 template <typename AS, typename OP> void construct_unary_op_create(ptr< AS > as);
00127
00128 virtual void visit_as_empty_expression(ptr< ::lestes::lang::cplus::sem::as_empty_expression > );
00129
00130 virtual void visit_as_expression_qmark(ptr< ::lestes::lang::cplus::sem::as_expression_qmark > );
00131
00132 virtual void visit_as_expression_comma(ptr< ::lestes::lang::cplus::sem::as_expression_comma > );
00133
00134 virtual void visit_as_expression_equal(ptr< ::lestes::lang::cplus::sem::as_expression_equal > );
00135
00136 virtual void visit_as_expression_plus_equal(ptr< ::lestes::lang::cplus::sem::as_expression_plus_equal > );
00137
00138 virtual void visit_as_expression_minus_equal(ptr< ::lestes::lang::cplus::sem::as_expression_minus_equal > );
00139
00140 virtual void visit_as_expression_star_equal(ptr< ::lestes::lang::cplus::sem::as_expression_star_equal > );
00141
00142 virtual void visit_as_expression_slash_equal(ptr< ::lestes::lang::cplus::sem::as_expression_slash_equal > );
00143
00144 virtual void visit_as_expression_percent_equal(ptr< ::lestes::lang::cplus::sem::as_expression_percent_equal > );
00145
00146 virtual void visit_as_expression_hat_equal(ptr< ::lestes::lang::cplus::sem::as_expression_hat_equal > );
00147
00148 virtual void visit_as_expression_amp_equal(ptr< ::lestes::lang::cplus::sem::as_expression_amp_equal > );
00149
00150 virtual void visit_as_expression_vbar_equal(ptr< ::lestes::lang::cplus::sem::as_expression_vbar_equal > );
00151
00152 virtual void visit_as_expression_less_less_equal(ptr< ::lestes::lang::cplus::sem::as_expression_less_less_equal > );
00153
00154 virtual void visit_as_expression_greater_greater_equal(ptr< ::lestes::lang::cplus::sem::as_expression_greater_greater_equal > );
00155
00156 virtual void visit_as_expression_equal_equal(ptr< ::lestes::lang::cplus::sem::as_expression_equal_equal > );
00157
00158 virtual void visit_as_expression_exclam_equal(ptr< ::lestes::lang::cplus::sem::as_expression_exclam_equal > );
00159
00160 virtual void visit_as_expression_less_equal(ptr< ::lestes::lang::cplus::sem::as_expression_less_equal > );
00161
00162 virtual void visit_as_expression_greater_equal(ptr< ::lestes::lang::cplus::sem::as_expression_greater_equal > );
00163
00164 virtual void visit_as_expression_less(ptr< ::lestes::lang::cplus::sem::as_expression_less > );
00165
00166 virtual void visit_as_expression_greater(ptr< ::lestes::lang::cplus::sem::as_expression_greater > );
00167
00168 virtual void visit_as_expression_vbar_vbar(ptr< ::lestes::lang::cplus::sem::as_expression_vbar_vbar > );
00169
00170 virtual void visit_as_expression_amp_amp(ptr< ::lestes::lang::cplus::sem::as_expression_amp_amp > );
00171
00172 virtual void visit_as_expression_vbar(ptr< ::lestes::lang::cplus::sem::as_expression_vbar > );
00173
00174 virtual void visit_as_expression_amp(ptr< ::lestes::lang::cplus::sem::as_expression_amp > );
00175
00176 virtual void visit_as_expression_hat(ptr< ::lestes::lang::cplus::sem::as_expression_hat > );
00177
00178 virtual void visit_as_expression_less_less(ptr< ::lestes::lang::cplus::sem::as_expression_less_less > );
00179
00180 virtual void visit_as_expression_greater_greater(ptr< ::lestes::lang::cplus::sem::as_expression_greater_greater > );
00181
00182 virtual void visit_as_expression_plus(ptr< ::lestes::lang::cplus::sem::as_expression_plus > );
00183
00184 virtual void visit_as_expression_minus(ptr< ::lestes::lang::cplus::sem::as_expression_minus > );
00185
00186 virtual void visit_as_expression_star(ptr< ::lestes::lang::cplus::sem::as_expression_star > );
00187
00188 virtual void visit_as_expression_slash(ptr< ::lestes::lang::cplus::sem::as_expression_slash > );
00189
00190 virtual void visit_as_expression_percent(ptr< ::lestes::lang::cplus::sem::as_expression_percent > );
00191
00192 virtual void visit_as_expression_dot_star(ptr< ::lestes::lang::cplus::sem::as_expression_dot_star > );
00193
00194 virtual void visit_as_expression_minus_greater_star(ptr< ::lestes::lang::cplus::sem::as_expression_minus_greater_star > );
00195
00196 virtual void visit_as_expression_brackets(ptr< ::lestes::lang::cplus::sem::as_expression_brackets > );
00197
00198 virtual void visit_as_expression_plus_plus_pre(ptr< ::lestes::lang::cplus::sem::as_expression_plus_plus_pre > );
00199
00200 virtual void visit_as_expression_plus_plus_post(ptr< ::lestes::lang::cplus::sem::as_expression_plus_plus_post > );
00201
00202 virtual void visit_as_expression_minus_minus_pre(ptr< ::lestes::lang::cplus::sem::as_expression_minus_minus_pre > );
00203
00204 virtual void visit_as_expression_minus_minus_post(ptr< ::lestes::lang::cplus::sem::as_expression_minus_minus_post > );
00205
00206 virtual void visit_as_expression_unary_amp(ptr< ::lestes::lang::cplus::sem::as_expression_unary_amp > );
00207
00208 virtual void visit_as_expression_unary_plus(ptr< ::lestes::lang::cplus::sem::as_expression_unary_plus > );
00209
00210 virtual void visit_as_expression_unary_minus(ptr< ::lestes::lang::cplus::sem::as_expression_unary_minus > );
00211
00212 virtual void visit_as_expression_unary_star(ptr< ::lestes::lang::cplus::sem::as_expression_unary_star > );
00213
00214 virtual void visit_as_expression_tilde(ptr< ::lestes::lang::cplus::sem::as_expression_tilde > );
00215
00216 virtual void visit_as_expression_exclam(ptr< ::lestes::lang::cplus::sem::as_expression_exclam > );
00217
00218 virtual void visit_as_expression_sizeof_expr(ptr< ::lestes::lang::cplus::sem::as_expression_sizeof_expr > );
00219
00220 virtual void visit_as_expression_typeid_expr(ptr< ::lestes::lang::cplus::sem::as_expression_typeid_expr > );
00221
00222 virtual void visit_as_expression_delete_base(ptr< ::lestes::lang::cplus::sem::as_expression_delete_base > );
00223
00224 virtual void visit_as_expression_delete(ptr< ::lestes::lang::cplus::sem::as_expression_delete > );
00225
00226 virtual void visit_as_expression_delete_array(ptr< ::lestes::lang::cplus::sem::as_expression_delete_array > );
00227
00228 virtual void visit_as_expression_throw(ptr< ::lestes::lang::cplus::sem::as_expression_throw > );
00229
00230 virtual void visit_as_expression_sizeof_type(ptr< ::lestes::lang::cplus::sem::as_expression_sizeof_type > );
00231
00232 virtual void visit_as_expression_typeid_type(ptr< ::lestes::lang::cplus::sem::as_expression_typeid_type > );
00233
00234 virtual void visit_as_expression_new(ptr< ::lestes::lang::cplus::sem::as_expression_new > );
00235
00236 virtual void visit_as_this_expression(ptr< ::lestes::lang::cplus::sem::as_this_expression > );
00237
00238 virtual void visit_as_literal(ptr< ::lestes::lang::cplus::sem::as_literal > );
00239
00240 virtual void visit_as_name_expression(ptr< ::lestes::lang::cplus::sem::as_name_expression > );
00241
00242 virtual void visit_as_expression_reinterpret_cast(ptr< ::lestes::lang::cplus::sem::as_expression_reinterpret_cast > );
00243
00244 virtual void visit_as_expression_dynamic_cast(ptr< ::lestes::lang::cplus::sem::as_expression_dynamic_cast > );
00245
00246 virtual void visit_as_expression_static_cast(ptr< ::lestes::lang::cplus::sem::as_expression_static_cast > );
00247
00248 virtual void visit_as_expression_const_cast(ptr< ::lestes::lang::cplus::sem::as_expression_const_cast > );
00249
00250 virtual void visit_as_expression_old_style_cast(ptr< ::lestes::lang::cplus::sem::as_expression_old_style_cast > );
00251
00252 virtual void visit_as_expression_functional_style_cast(ptr< ::lestes::lang::cplus::sem::as_expression_functional_style_cast > );
00253
00254 virtual void visit_as_expression_member_access_dot(ptr< ::lestes::lang::cplus::sem::as_expression_member_access_dot > );
00255
00256 virtual void visit_as_expression_member_access_arrow(ptr< ::lestes::lang::cplus::sem::as_expression_member_access_arrow > );
00257
00258 virtual void visit_as_expression_pseudo_destruct_dot(ptr< ::lestes::lang::cplus::sem::as_expression_pseudo_destruct_dot > );
00259
00260 virtual void visit_as_expression_pseudo_destruct_arrow(ptr< ::lestes::lang::cplus::sem::as_expression_pseudo_destruct_arrow > );
00261
00262 virtual void visit_as_expression_function_call(ptr< ::lestes::lang::cplus::sem::as_expression_function_call > );
00263
00264 virtual void visit_as_constant_expression(ptr< ::lestes::lang::cplus::sem::as_constant_expression > );
00265
00266
00267
00268 static ptr< sa_deconstruct_spse > create (
00269 ptr< or_or_functional > a__sa_deconstruct_spse__result);
00270
00271
00272 static ptr< sa_deconstruct_spse > create (
00273 );
00274
00275
00276
00277 ptr< or_or_functional > process( const ptr< ::lestes::lang::cplus::sem::as_expression > & );
00278
00279
00280 virtual ptr<reflection_list> reflection_get() const;
00281
00282 virtual ptr<field_list_list> field_values_get() const;
00283
00284 protected:
00285
00286 sa_deconstruct_spse (
00287 ptr< or_or_functional > a__sa_deconstruct_spse__result);
00288
00289
00290 virtual void gc_mark();
00291
00292 private:
00293 srp< or_or_functional > result;
00294 static ptr<reflection_list> reflection;
00295
00296 };
00297
00298
00299 end_package(sem);
00300 end_package(cplus);
00301 end_package(lang);
00302 end_package(lestes);
00303
00304 package(lestes);
00305 package(std);
00306 specialize_objectize_for_enum( ::lestes::lang::cplus::sem::ss_decl_enum );
00307 end_package(std);
00308 end_package(lestes);
00309
00310 #endif // lestes__lang__cplus__sem__sa_deconstruct_spse_g_hh__included