ss_ss2pi_base.g.hh

Go to the documentation of this file.
00001 // This file is automatically generated, do not edit.
00002 
00003 #ifndef lestes__lang__cplus__sem__ss_ss2pi_base_g_hh__included
00004 #define lestes__lang__cplus__sem__ss_ss2pi_base_g_hh__included
00005 
00006 #include <lestes/common.hh>
00007 #include <lestes/lang/cplus/sem/ss_statement.g.hh>
00008 #include <lestes/lang/cplus/sem/ss_type_visitor.v.g.hh>
00009 #include <lestes/lang/cplus/sem/visitor.v.g.hh>
00010 #include <lestes/lang/cplus/sem/ss_declaration_visitor.v.g.hh>
00011 #include <lestes/lang/cplus/sem/ss_ss2pi_typedefs.hh>
00012 
00013 #include <lestes/std/objectize_macros.hh>
00014 package(lestes);
00015 package(std);
00016 class object;
00017 end_package(std);
00018 end_package(lestes);
00019 
00020 package(lestes);
00021 package(backend_v2);
00022 package(intercode);
00023 class pi_pi;
00024 end_package(intercode);
00025 end_package(backend_v2);
00026 end_package(lestes);
00027 
00028 package(lestes);
00029 package(backend_v2);
00030 package(intercode);
00031 class pi_mem;
00032 end_package(intercode);
00033 end_package(backend_v2);
00034 end_package(lestes);
00035 
00036 package(lestes);
00037 package(backend_v2);
00038 package(intercode);
00039 class pi_mem_ptr_deref;
00040 end_package(intercode);
00041 end_package(backend_v2);
00042 end_package(lestes);
00043 
00044 package(lestes);
00045 package(backend_v2);
00046 package(intercode);
00047 class pi_preg;
00048 end_package(intercode);
00049 end_package(backend_v2);
00050 end_package(lestes);
00051 
00052 package(lestes);
00053 package(backend_v2);
00054 package(intercode);
00055 class pi_sp;
00056 end_package(intercode);
00057 end_package(backend_v2);
00058 end_package(lestes);
00059 
00060 package(lestes);
00061 package(backend_v2);
00062 package(intercode);
00063 class pi_operand;
00064 end_package(intercode);
00065 end_package(backend_v2);
00066 end_package(lestes);
00067 
00068 package(lestes);
00069 package(backend_v2);
00070 package(intercode);
00071 class pi_mem_factory;
00072 end_package(intercode);
00073 end_package(backend_v2);
00074 end_package(lestes);
00075 
00076 package(lestes);
00077 package(md);
00078 package(literals);
00079 class literal_info_base;
00080 end_package(literals);
00081 end_package(md);
00082 end_package(lestes);
00083 
00084 package(lestes);
00085 package(lang);
00086 package(cplus);
00087 package(sem);
00088 
00089 
00090 class ss_function_declaration;
00091 class ss_declaration;
00092 class ss_stmt2pi_base;
00093 class ss_compound_stmt;
00094 class ss_type;
00095 class ss_sp;
00096 class ss_expression;
00097 class ss_decl_stmt;
00098 class ss_stmt2pi;
00099 class ss_decl2pi;
00100 class ss_decl2mem;
00101 class ss_type2destructor;
00102 class ss_expr2destination;
00103 class ss_expr2pi;
00104 class ss_destructor_table;
00105 class ss_destructor_tables;
00106 class ss_destructor_tables_stack;
00107 class ss_linfo2pi_linfo;
00108 
00109 
00110 //! Visitor responsible for converting statements into pseudoinstructions
00111 class ss_stmt2pi : public ss_statement_visitor {
00112 public:
00113         //! The method current_function_get returns the value of the field ss_stmt2pi::current_function.
00114         ptr< ss_function_declaration > current_function_get() const;
00115 
00116         //! The method current_function_set sets the field ss_stmt2pi::current_function to the given value.
00117         void current_function_set(const ptr< ss_function_declaration > &);
00118 
00119         //! The method local_variable_map_get returns the value of the field ss_stmt2pi::local_variable_map.
00120         ptr< variable_map_type > local_variable_map_get() const;
00121 
00122         //! The method local_variable_map_set sets the field ss_stmt2pi::local_variable_map to the given value.
00123         void local_variable_map_set(const ptr< variable_map_type > &);
00124 
00125         //! The method namespace_variable_map_get returns the value of the field ss_stmt2pi::namespace_variable_map.
00126         ptr< variable_map_type > namespace_variable_map_get() const;
00127 
00128         //! The method namespace_variable_map_set sets the field ss_stmt2pi::namespace_variable_map to the given value.
00129         void namespace_variable_map_set(const ptr< variable_map_type > &);
00130 
00131         //! API to store record of memmory placeholder for variable. It automaticaly distinguishes between global scope and local scope, where record shall be added (according to "current_function" member).
00132         void mem_variable_set(ptr< ss_declaration > , ptr< ::lestes::backend_v2::intercode::pi_mem_factory > );
00133 
00134         //! API to look-up memory placeholder, which was allocated for variable. It searches in both local and global scope. It also automaticaly inserts new record for alias and function parameter declarations.
00135         ptr< ::lestes::backend_v2::intercode::pi_mem_factory > mem_variable_get(ptr< ss_declaration > );
00136 
00137         virtual void visit_ss_compound_stmt(ptr< ::lestes::lang::cplus::sem::ss_compound_stmt > );
00138 
00139         virtual void visit_ss_decl_stmt(ptr< ::lestes::lang::cplus::sem::ss_decl_stmt > );
00140 
00141         virtual void visit_ss_try(ptr< ::lestes::lang::cplus::sem::ss_try > );
00142 
00143         virtual void visit_ss_break(ptr< ::lestes::lang::cplus::sem::ss_break > );
00144 
00145         virtual void visit_ss_return(ptr< ::lestes::lang::cplus::sem::ss_return > );
00146 
00147         virtual void visit_ss_goto(ptr< ::lestes::lang::cplus::sem::ss_goto > );
00148 
00149         virtual void visit_ss_expr_stmt(ptr< ::lestes::lang::cplus::sem::ss_expr_stmt > );
00150 
00151         virtual void visit_ss_continue(ptr< ::lestes::lang::cplus::sem::ss_continue > );
00152 
00153         virtual void visit_ss_if_stmt(ptr< ::lestes::lang::cplus::sem::ss_if_stmt > );
00154 
00155         virtual void visit_ss_catch(ptr< ::lestes::lang::cplus::sem::ss_catch > );
00156 
00157         virtual void visit_ss_switch_stmt(ptr< ::lestes::lang::cplus::sem::ss_switch_stmt > );
00158 
00159         virtual void visit_ss_do(ptr< ::lestes::lang::cplus::sem::ss_do > );
00160 
00161         virtual void visit_ss_while(ptr< ::lestes::lang::cplus::sem::ss_while > );
00162 
00163         virtual void visit_ss_for(ptr< ::lestes::lang::cplus::sem::ss_for > );
00164 
00165         
00166         //! First generated factory method for class ss_stmt2pi.
00167         static ptr< ss_stmt2pi > create (
00168                 ptr< ss_function_declaration > a__ss_stmt2pi__current_function,
00169                 ptr< variable_map_type > a__ss_stmt2pi__local_variable_map,
00170                 ptr< variable_map_type > a__ss_stmt2pi__namespace_variable_map);
00171 
00172         
00173 
00174         //! for purposes of dumping
00175         virtual ptr<reflection_list> reflection_get() const;
00176         //! for purposes of dumping
00177         virtual ptr<field_list_list> field_values_get() const;
00178         
00179 protected:
00180         //! Generated constructor for class ss_stmt2pi.
00181         ss_stmt2pi (
00182                 ptr< ss_function_declaration > a__ss_stmt2pi__current_function,
00183                 ptr< variable_map_type > a__ss_stmt2pi__local_variable_map,
00184                 ptr< variable_map_type > a__ss_stmt2pi__namespace_variable_map);
00185 
00186         //! Marking routine for class ss_stmt2pi. 
00187         virtual void gc_mark();
00188 
00189 private:
00190         //! Current function, in which we are transforming to pi. Needed for expression tranformation. When on global scope, current function is set to NULL.
00191         srp< ss_function_declaration > current_function;
00192         /*! \brief      Map of variables in current function. 
00193 
00194          
00195                                         We distinguish these variables, from global, because after transformation
00196                                         of the current function, they are of no use.
00197                                 
00198         */
00199         srp< variable_map_type > local_variable_map;
00200         //! Map of variables on namespace scope.
00201         srp< variable_map_type > namespace_variable_map;
00202         static ptr<reflection_list> reflection;
00203         
00204 }; // ss_stmt2pi
00205 
00206 
00207 //! Visitor responsible for converting declarations into pseudoinstructions
00208 class ss_decl2pi : public ss_decl2pi_default {
00209 public:
00210         //! The method caller_get returns the value of the field ss_decl2pi::caller.
00211         ptr< ss_stmt2pi > caller_get() const;
00212 
00213         //! The method caller_set sets the field ss_decl2pi::caller to the given value.
00214         void caller_set(const ptr< ss_stmt2pi > &);
00215 
00216         //! The method statement_get returns the value of the field ss_decl2pi::statement.
00217         ptr< ss_decl_stmt > statement_get() const;
00218 
00219         //! The method statement_set sets the field ss_decl2pi::statement to the given value.
00220         void statement_set(const ptr< ss_decl_stmt > &);
00221 
00222         virtual void default_action(ptr< ::lestes::lang::cplus::sem::ss_declaration > );
00223 
00224         virtual void visit_ss_function_declaration(ptr< ::lestes::lang::cplus::sem::ss_function_declaration > );
00225 
00226         virtual void visit_ss_object_declaration(ptr< ::lestes::lang::cplus::sem::ss_object_declaration > );
00227 
00228         virtual void visit_ss_structure_declaration(ptr< ::lestes::lang::cplus::sem::ss_structure_declaration > );
00229 
00230         
00231         //! First generated factory method for class ss_decl2pi.
00232         static ptr< ss_decl2pi > create (
00233                 ptr< ss_stmt2pi > a__ss_decl2pi__caller,
00234                 ptr< ss_decl_stmt > a__ss_decl2pi__statement);
00235 
00236         
00237 
00238         //! for purposes of dumping
00239         virtual ptr<reflection_list> reflection_get() const;
00240         //! for purposes of dumping
00241         virtual ptr<field_list_list> field_values_get() const;
00242         
00243 protected:
00244         //! Generated constructor for class ss_decl2pi.
00245         ss_decl2pi (
00246                 ptr< ss_stmt2pi > a__ss_decl2pi__caller,
00247                 ptr< ss_decl_stmt > a__ss_decl2pi__statement);
00248 
00249         //! Marking routine for class ss_decl2pi. 
00250         virtual void gc_mark();
00251 
00252 private:
00253         //! Each declaration visitor is called from statement visitor.
00254         srp< ss_stmt2pi > caller;
00255         //! Statement containing current declaration. Used for initializations.
00256         srp< ss_decl_stmt > statement;
00257         static ptr<reflection_list> reflection;
00258         
00259 }; // ss_decl2pi
00260 
00261 
00262 /*! \brief Visitor responsible for getting correct pi_mem_factory for a given declaration
00263 
00264 
00265                                 Used for lookup for declarations, which are not declared through ordinary ss_decl_stmt,
00266                                 such as fake declarations, function parameter declarations.
00267                         
00268 */
00269 class ss_decl2mem : public ss_decl2pi_default {
00270 public:
00271         //! The method caller_get returns the value of the field ss_decl2mem::caller.
00272         ptr< ss_stmt2pi > caller_get() const;
00273 
00274         //! The method caller_set sets the field ss_decl2mem::caller to the given value.
00275         void caller_set(const ptr< ss_stmt2pi > &);
00276 
00277         //! The method result_get returns the value of the field ss_decl2mem::result.
00278         ptr< ::lestes::backend_v2::intercode::pi_mem_factory > result_get() const;
00279 
00280         //! The method result_set sets the field ss_decl2mem::result to the given value.
00281         void result_set(const ptr< ::lestes::backend_v2::intercode::pi_mem_factory > &);
00282 
00283         virtual void default_action(ptr< ::lestes::lang::cplus::sem::ss_declaration > );
00284 
00285         virtual void visit_ss_parameter_declaration(ptr< ::lestes::lang::cplus::sem::ss_parameter_declaration > );
00286 
00287         virtual void visit_ss_fake_declaration(ptr< ::lestes::lang::cplus::sem::ss_fake_declaration > );
00288 
00289         virtual void visit_ss_object_declaration(ptr< ::lestes::lang::cplus::sem::ss_object_declaration > );
00290 
00291         
00292         //! First generated factory method for class ss_decl2mem.
00293         static ptr< ss_decl2mem > create (
00294                 ptr< ss_stmt2pi > a__ss_decl2mem__caller,
00295                 ptr< ::lestes::backend_v2::intercode::pi_mem_factory > a__ss_decl2mem__result);
00296 
00297         //! Second generated factory method for class ss_decl2mem.
00298         static ptr< ss_decl2mem > create (
00299                 ptr< ss_stmt2pi > a__ss_decl2mem__caller);
00300 
00301         
00302         //! "visit-return" method
00303         ptr< ::lestes::backend_v2::intercode::pi_mem_factory > get_real_decl_mem( const ptr< ::lestes::lang::cplus::sem::ss_declaration > & );
00304 
00305         //! for purposes of dumping
00306         virtual ptr<reflection_list> reflection_get() const;
00307         //! for purposes of dumping
00308         virtual ptr<field_list_list> field_values_get() const;
00309         
00310 protected:
00311         //! Generated constructor for class ss_decl2mem.
00312         ss_decl2mem (
00313                 ptr< ss_stmt2pi > a__ss_decl2mem__caller,
00314                 ptr< ::lestes::backend_v2::intercode::pi_mem_factory > a__ss_decl2mem__result);
00315 
00316         //! Marking routine for class ss_decl2mem. 
00317         virtual void gc_mark();
00318 
00319 private:
00320         //! Statement visitor caller - we need to know current function and variable maps.
00321         srp< ss_stmt2pi > caller;
00322         //! Returned pi_mem_factory for a given declaration.
00323         srp< ::lestes::backend_v2::intercode::pi_mem_factory > result;
00324         static ptr<reflection_list> reflection;
00325         
00326 }; // ss_decl2mem
00327 
00328 
00329 class ss_type2destructor : public ss_type2destructor_base {
00330 public:
00331         //! The method destructor_get returns the value of the field ss_type2destructor::destructor.
00332         ptr< ss_function_declaration > destructor_get() const;
00333 
00334         //! The method destructor_set sets the field ss_type2destructor::destructor to the given value.
00335         void destructor_set(const ptr< ss_function_declaration > &);
00336 
00337         virtual void default_destructor(ptr< ::lestes::lang::cplus::sem::ss_type > );
00338 
00339         virtual void visit_ss_class(ptr< ::lestes::lang::cplus::sem::ss_class > );
00340 
00341         virtual void visit_ss_union(ptr< ::lestes::lang::cplus::sem::ss_union > );
00342 
00343         
00344         //! First generated factory method for class ss_type2destructor.
00345         static ptr< ss_type2destructor > create (
00346                 ptr< ss_function_declaration > a__ss_type2destructor__destructor);
00347 
00348         //! Second generated factory method for class ss_type2destructor.
00349         static ptr< ss_type2destructor > create (
00350                 );
00351 
00352         
00353         //! "visit-return" method
00354         ptr< ss_function_declaration > find_destructor( const ptr< ::lestes::lang::cplus::sem::ss_type > & );
00355 
00356         //! for purposes of dumping
00357         virtual ptr<reflection_list> reflection_get() const;
00358         //! for purposes of dumping
00359         virtual ptr<field_list_list> field_values_get() const;
00360         
00361 protected:
00362         //! Generated constructor for class ss_type2destructor.
00363         ss_type2destructor (
00364                 ptr< ss_function_declaration > a__ss_type2destructor__destructor);
00365 
00366         //! Marking routine for class ss_type2destructor. 
00367         virtual void gc_mark();
00368 
00369 private:
00370         /*! \brief Destructor for a given type.
00371 
00372         For types with no destructor NULL is set.
00373         */
00374         srp< ss_function_declaration > destructor;
00375         static ptr<reflection_list> reflection;
00376         
00377 }; // ss_type2destructor
00378 
00379 
00380 //! Visitor for determination destination of sideeffect expression. Used for origin computation.
00381 class ss_expr2destination : public ss_expr2destination_base {
00382 public:
00383         //! The method destination_get returns the value of the field ss_expr2destination::destination.
00384         ptr< ss_expression > destination_get() const;
00385 
00386         //! The method destination_set sets the field ss_expr2destination::destination to the given value.
00387         void destination_set(const ptr< ss_expression > &);
00388 
00389         virtual void default_destination(ptr< ::lestes::lang::cplus::sem::ss_expression > );
00390 
00391         virtual void visit_ss_funcall(ptr< ::lestes::lang::cplus::sem::ss_funcall > );
00392 
00393         virtual void visit_ss_assign(ptr< ::lestes::lang::cplus::sem::ss_assign > );
00394 
00395         virtual void visit_ss_vol_get(ptr< ::lestes::lang::cplus::sem::ss_vol_get > );
00396 
00397         
00398         //! First generated factory method for class ss_expr2destination.
00399         static ptr< ss_expr2destination > create (
00400                 ptr< ss_expression > a__ss_expr2destination__destination);
00401 
00402         //! Second generated factory method for class ss_expr2destination.
00403         static ptr< ss_expr2destination > create (
00404                 );
00405 
00406         
00407         //! "visit-return" method
00408         ptr< ss_expression > get_destination( const ptr< ::lestes::lang::cplus::sem::ss_expression > & );
00409 
00410         //! for purposes of dumping
00411         virtual ptr<reflection_list> reflection_get() const;
00412         //! for purposes of dumping
00413         virtual ptr<field_list_list> field_values_get() const;
00414         
00415 protected:
00416         //! Generated constructor for class ss_expr2destination.
00417         ss_expr2destination (
00418                 ptr< ss_expression > a__ss_expr2destination__destination);
00419 
00420         //! Marking routine for class ss_expr2destination. 
00421         virtual void gc_mark();
00422 
00423 private:
00424         /*! \brief      Field for storing result.
00425 
00426                 
00427                                         In case of sideeffect expression without destination(funcall)
00428                                         is set to NULL.
00429                                         
00430                                 
00431         */
00432         srp< ss_expression > destination;
00433         static ptr<reflection_list> reflection;
00434         
00435 }; // ss_expr2destination
00436 
00437 
00438 //! Visitor for converting expressions into pseudoinstructions.
00439 class ss_expr2pi : public ss_expression_visitor {
00440 public:
00441         //! The method caller_get returns the value of the field ss_expr2pi::caller.
00442         ptr< ss_stmt2pi > caller_get() const;
00443 
00444         //! The method caller_set sets the field ss_expr2pi::caller to the given value.
00445         void caller_set(const ptr< ss_stmt2pi > &);
00446 
00447         //! The method result_get returns the value of the field ss_expr2pi::result.
00448         ptr< ::lestes::backend_v2::intercode::pi_operand > result_get() const;
00449 
00450         //! The method result_set sets the field ss_expr2pi::result to the given value.
00451         void result_set(const ptr< ::lestes::backend_v2::intercode::pi_operand > &);
00452 
00453         //! The method psp_get returns the value of the field ss_expr2pi::psp.
00454         ptr< ss_sp > psp_get() const;
00455 
00456         //! The method psp_set sets the field ss_expr2pi::psp to the given value.
00457         void psp_set(const ptr< ss_sp > &);
00458 
00459         //! The method temporaries_get returns the value of the field ss_expr2pi::temporaries.
00460         ptr< ss_destructor_table > temporaries_get() const;
00461 
00462         //! The method temporaries_set sets the field ss_expr2pi::temporaries to the given value.
00463         void temporaries_set(const ptr< ss_destructor_table > &);
00464 
00465         //! The method expr2operand_map_get returns the value of the field ss_expr2pi::expr2operand_map.
00466         ptr< expression_results_map_type > expr2operand_map_get() const;
00467 
00468         //! The method expr2operand_map_set sets the field ss_expr2pi::expr2operand_map to the given value.
00469         void expr2operand_map_set(const ptr< expression_results_map_type > &);
00470 
00471         //! The method returned_pointer_get returns the value of the field ss_expr2pi::returned_pointer.
00472         bool returned_pointer_get() const;
00473 
00474         //! The method returned_pointer_set sets the field ss_expr2pi::returned_pointer to the given value.
00475         void returned_pointer_set(bool);
00476 
00477         //! Check whether given expression was yet transformed.
00478         bool evaluated(ptr< ss_expression > );
00479 
00480         //! Computes an origin of a given pi_mem_factory inside fullexpression settled bye ss_sp
00481         ptr< ::lestes::backend_v2::intercode::pi_pi > compute_origin(ptr< ::lestes::backend_v2::intercode::pi_mem_factory > , ptr< ss_sp > );
00482 
00483         //! 
00484         ptr< ::lestes::backend_v2::intercode::pi_preg > returns_preg(const ptr < ss_expression > & );
00485 
00486         ptr< ::lestes::backend_v2::intercode::pi_mem > returns_mem(const ptr < ss_expression > & );
00487 
00488         ptr< ::lestes::backend_v2::intercode::pi_mem_ptr_deref > returns_mem_pointer(const ptr < ss_expression > & );
00489 
00490         bool is_returned_pointer(ptr< ss_expression > );
00491 
00492         virtual void visit_ss_assign(ptr< ::lestes::lang::cplus::sem::ss_assign > );
00493 
00494         virtual void visit_ss_add(ptr< ::lestes::lang::cplus::sem::ss_add > );
00495 
00496         virtual void visit_ss_sub(ptr< ::lestes::lang::cplus::sem::ss_sub > );
00497 
00498         virtual void visit_ss_mul(ptr< ::lestes::lang::cplus::sem::ss_mul > );
00499 
00500         virtual void visit_ss_div(ptr< ::lestes::lang::cplus::sem::ss_div > );
00501 
00502         virtual void visit_ss_mod(ptr< ::lestes::lang::cplus::sem::ss_mod > );
00503 
00504         virtual void visit_ss_shr(ptr< ::lestes::lang::cplus::sem::ss_shr > );
00505 
00506         virtual void visit_ss_shl(ptr< ::lestes::lang::cplus::sem::ss_shl > );
00507 
00508         virtual void visit_ss_sbg(ptr< ::lestes::lang::cplus::sem::ss_sbg > );
00509 
00510         virtual void visit_ss_sbl(ptr< ::lestes::lang::cplus::sem::ss_sbl > );
00511 
00512         virtual void visit_ss_sbng(ptr< ::lestes::lang::cplus::sem::ss_sbng > );
00513 
00514         virtual void visit_ss_sbnl(ptr< ::lestes::lang::cplus::sem::ss_sbnl > );
00515 
00516         virtual void visit_ss_sbne(ptr< ::lestes::lang::cplus::sem::ss_sbne > );
00517 
00518         virtual void visit_ss_sbe(ptr< ::lestes::lang::cplus::sem::ss_sbe > );
00519 
00520         virtual void visit_ss_band(ptr< ::lestes::lang::cplus::sem::ss_band > );
00521 
00522         virtual void visit_ss_bor(ptr< ::lestes::lang::cplus::sem::ss_bor > );
00523 
00524         virtual void visit_ss_bxor(ptr< ::lestes::lang::cplus::sem::ss_bxor > );
00525 
00526         virtual void visit_ss_land(ptr< ::lestes::lang::cplus::sem::ss_land > );
00527 
00528         virtual void visit_ss_lor(ptr< ::lestes::lang::cplus::sem::ss_lor > );
00529 
00530         virtual void visit_ss_arr_acc(ptr< ::lestes::lang::cplus::sem::ss_arr_acc > );
00531 
00532         virtual void visit_ss_pfuncall(ptr< ::lestes::lang::cplus::sem::ss_pfuncall > );
00533 
00534         virtual void visit_ss_funcall(ptr< ::lestes::lang::cplus::sem::ss_funcall > );
00535 
00536         virtual void visit_ss_ifuncall(ptr< ::lestes::lang::cplus::sem::ss_ifuncall > );
00537 
00538         virtual void visit_ss_mfuncall(ptr< ::lestes::lang::cplus::sem::ss_mfuncall > );
00539 
00540         virtual void visit_ss_vfuncall(ptr< ::lestes::lang::cplus::sem::ss_vfuncall > );
00541 
00542         virtual void visit_ss_dereference(ptr< ::lestes::lang::cplus::sem::ss_dereference > );
00543 
00544         virtual void visit_ss_conversion(ptr< ::lestes::lang::cplus::sem::ss_conversion > );
00545 
00546         virtual void visit_ss_array_to_pointer(ptr< ::lestes::lang::cplus::sem::ss_array_to_pointer > );
00547 
00548         virtual void visit_ss_bind_reference(ptr< ::lestes::lang::cplus::sem::ss_bind_reference > );
00549 
00550         virtual void visit_ss_bind_to_temporary(ptr< ::lestes::lang::cplus::sem::ss_bind_to_temporary > );
00551 
00552         virtual void visit_ss_get(ptr< ::lestes::lang::cplus::sem::ss_get > );
00553 
00554         virtual void visit_ss_vol_get(ptr< ::lestes::lang::cplus::sem::ss_vol_get > );
00555 
00556         virtual void visit_ss_gat(ptr< ::lestes::lang::cplus::sem::ss_gat > );
00557 
00558         virtual void visit_ss_neg(ptr< ::lestes::lang::cplus::sem::ss_neg > );
00559 
00560         virtual void visit_ss_lnot(ptr< ::lestes::lang::cplus::sem::ss_lnot > );
00561 
00562         virtual void visit_ss_bnot(ptr< ::lestes::lang::cplus::sem::ss_bnot > );
00563 
00564         virtual void visit_ss_address_of(ptr< ::lestes::lang::cplus::sem::ss_address_of > );
00565 
00566         virtual void visit_ss_this_expr(ptr< ::lestes::lang::cplus::sem::ss_this_expr > );
00567 
00568         virtual void visit_ss_literal(ptr< ::lestes::lang::cplus::sem::ss_literal > );
00569 
00570         virtual void visit_ss_ternary(ptr< ::lestes::lang::cplus::sem::ss_ternary > );
00571 
00572         virtual void visit_ss_var_ref_by_qname(ptr< ::lestes::lang::cplus::sem::ss_var_ref_by_qname > );
00573 
00574         virtual void visit_ss_var_ref(ptr< ::lestes::lang::cplus::sem::ss_var_ref > );
00575 
00576         virtual void visit_ss_throw(ptr< ::lestes::lang::cplus::sem::ss_throw > );
00577 
00578         virtual void visit_ss_member_ptr(ptr< ::lestes::lang::cplus::sem::ss_member_ptr > );
00579 
00580         virtual void visit_ss_ptr_member_ptr(ptr< ::lestes::lang::cplus::sem::ss_ptr_member_ptr > );
00581 
00582         virtual void visit_ss_access(ptr< ::lestes::lang::cplus::sem::ss_access > );
00583 
00584         virtual void visit_ss_ptr_access(ptr< ::lestes::lang::cplus::sem::ss_ptr_access > );
00585 
00586         
00587         //! First generated factory method for class ss_expr2pi.
00588         static ptr< ss_expr2pi > create (
00589                 ptr< ss_stmt2pi > a__ss_expr2pi__caller,
00590                 ptr< ::lestes::backend_v2::intercode::pi_operand > a__ss_expr2pi__result,
00591                 ptr< ss_sp > a__ss_expr2pi__psp,
00592                 ptr< ss_destructor_table > a__ss_expr2pi__temporaries,
00593                 ptr< expression_results_map_type > a__ss_expr2pi__expr2operand_map,
00594                 bool a__ss_expr2pi__returned_pointer);
00595 
00596         //! Second generated factory method for class ss_expr2pi.
00597         static ptr< ss_expr2pi > create (
00598                 ptr< ss_stmt2pi > a__ss_expr2pi__caller,
00599                 ptr< ss_sp > a__ss_expr2pi__psp,
00600                 ptr< ss_destructor_table > a__ss_expr2pi__temporaries,
00601                 ptr< expression_results_map_type > a__ss_expr2pi__expr2operand_map);
00602 
00603         
00604         //! "visit-return" method
00605         ptr< ::lestes::backend_v2::intercode::pi_operand > returns( const ptr< ::lestes::lang::cplus::sem::ss_expression > & );
00606 
00607         //! for purposes of dumping
00608         virtual ptr<reflection_list> reflection_get() const;
00609         //! for purposes of dumping
00610         virtual ptr<field_list_list> field_values_get() const;
00611         
00612 protected:
00613         //! Generated constructor for class ss_expr2pi.
00614         ss_expr2pi (
00615                 ptr< ss_stmt2pi > a__ss_expr2pi__caller,
00616                 ptr< ::lestes::backend_v2::intercode::pi_operand > a__ss_expr2pi__result,
00617                 ptr< ss_sp > a__ss_expr2pi__psp,
00618                 ptr< ss_destructor_table > a__ss_expr2pi__temporaries,
00619                 ptr< expression_results_map_type > a__ss_expr2pi__expr2operand_map,
00620                 bool a__ss_expr2pi__returned_pointer);
00621 
00622         //! Marking routine for class ss_expr2pi. 
00623         virtual void gc_mark();
00624 
00625 private:
00626         //! Nearest statement visitor caller(needed for variable access).
00627         srp< ss_stmt2pi > caller;
00628         /*! \brief      Result of evaluating current expression
00629 
00630         
00631                                         Usually pseudoregister, where the result is stored.
00632                                         For lvalues appropriate memory placeholder(pi_mem) is stored.
00633                                         For void funcalls NULL is stored.
00634                                 
00635         */
00636         srp< ::lestes::backend_v2::intercode::pi_operand > result;
00637         /*! \brief      Previous full-expression sequence point
00638 
00639         
00640                                         It points to the psp of the fullexpression (or the whole expression of the initializer).
00641                                         Used for stop mark of pi_mem origin computation - only side effects
00642                                         inside the whole expression are significant.
00643                                 
00644         */
00645         srp< ss_sp > psp;
00646         /*! \brief      Destructor table for temporary variables
00647 
00648         
00649                                         Temporaries which rise, when evaluating exression.
00650                                         They will be destructed, after evaluating the whole expression(i.e. the whole statement)
00651                                 
00652         */
00653         srp< ss_destructor_table > temporaries;
00654         /*! \brief      Map for result of subexpressions inside fullexpression
00655 
00656         
00657                                         It prevents of reevaluation of already evaluated subexpressions.
00658                                         Used also for determination of memory destination of side effects.
00659                                 
00660         */
00661         srp< expression_results_map_type > expr2operand_map;
00662         //! Temporary variable used by is_returned_pointer method
00663         bool returned_pointer;
00664         static ptr<reflection_list> reflection;
00665         
00666 }; // ss_expr2pi
00667 
00668 
00669 class ss_destructor_table : public ::lestes::std::object {
00670 public:
00671         //! The method compound_stmt_get returns the value of the field ss_destructor_table::compound_stmt.
00672         ptr< ss_compound_stmt > compound_stmt_get() const;
00673 
00674         //! The method compound_stmt_set sets the field ss_destructor_table::compound_stmt to the given value.
00675         void compound_stmt_set(const ptr< ss_compound_stmt > &);
00676 
00677         //! The method destructors_get returns the value of the field ss_destructor_table::destructors.
00678         ptr< ::lestes::std::list< srp< destructor_entry_type > > > destructors_get() const;
00679 
00680         //! The method destructors_set sets the field ss_destructor_table::destructors to the given value.
00681         void destructors_set(const ptr< ::lestes::std::list< srp< destructor_entry_type > > > & );
00682 
00683         void destructor_add(ptr< ss_function_declaration > , ptr< ::lestes::backend_v2::intercode::pi_mem_factory > );
00684 
00685         //! Implements back rolling of a destructor table (i.e.compound statement).
00686         virtual ptr< ::lestes::backend_v2::intercode::pi_sp > back_roll_table(ptr< ::lestes::backend_v2::intercode::pi_sp > psp, ptr< ::lestes::backend_v2::intercode::pi_sp > nsp);
00687 
00688         
00689         //! First generated factory method for class ss_destructor_table.
00690         static ptr< ss_destructor_table > create (
00691                 ptr< ss_compound_stmt > a__ss_destructor_table__compound_stmt,
00692                 ptr< ::lestes::std::list< srp< destructor_entry_type > > > a__ss_destructor_table__destructors);
00693 
00694         //! Second generated factory method for class ss_destructor_table.
00695         static ptr< ss_destructor_table > create (
00696                 ptr< ss_compound_stmt > a__ss_destructor_table__compound_stmt);
00697 
00698         
00699 
00700         //! for purposes of dumping
00701         virtual ptr<reflection_list> reflection_get() const;
00702         //! for purposes of dumping
00703         virtual ptr<field_list_list> field_values_get() const;
00704         
00705 protected:
00706         //! Generated constructor for class ss_destructor_table.
00707         ss_destructor_table (
00708                 ptr< ss_compound_stmt > a__ss_destructor_table__compound_stmt,
00709                 ptr< ::lestes::std::list< srp< destructor_entry_type > > > a__ss_destructor_table__destructors);
00710 
00711         //! Marking routine for class ss_destructor_table. 
00712         virtual void gc_mark();
00713 
00714 private:
00715         //! Compound statement, where variable (destructor) takes place.
00716         srp< ss_compound_stmt > compound_stmt;
00717         /*! 
00718         For types, which have no destructors, destructor set to NULL.
00719         */
00720         srp< ::lestes::std::list< srp< destructor_entry_type > > >  destructors;
00721         static ptr<reflection_list> reflection;
00722         
00723 }; // ss_destructor_table
00724 
00725 
00726 class ss_destructor_tables : public ::lestes::std::object {
00727 public:
00728         //! The method singleton_instance_get returns the value of the field ss_destructor_tables::singleton_instance.
00729         static ptr< ss_destructor_tables > singleton_instance_get();
00730 
00731         //! The method singleton_instance_set sets the field ss_destructor_tables::singleton_instance to the given value.
00732         static void singleton_instance_set(const ptr< ss_destructor_tables > &);
00733 
00734         static ptr< ss_destructor_tables > instance();
00735 
00736         //! Returns DT corresponding to newly entered compound statement, where to add destructors
00737         virtual ptr< ss_destructor_table > open_compound_stmt(ptr< ss_compound_stmt > ) abstract;
00738 
00739         //! Returns DT corresponding to parent compound statement, where to continue adding destructors
00740         virtual ptr< ss_destructor_table > close_compound_stmt() abstract;
00741 
00742         //! Find and record destructor for ss type, which destructs appropriate memory placeholder
00743         virtual void destructor_add(ptr< ss_type > , ptr< ::lestes::backend_v2::intercode::pi_mem_factory > ) abstract;
00744 
00745         //! Find and record destructor for ss type, which destructs appropriate memory placeholder
00746         virtual void destructor_add_to_destr(ptr< ss_destructor_table > , ptr< ss_type > , ptr< ::lestes::backend_v2::intercode::pi_mem_factory > ) abstract;
00747 
00748         //! Normal end of compound statement
00749         virtual void back_roll_from_current_compound_stmt() abstract;
00750 
00751         //! Abnormal end of compound statement;psp,nsp shall be taken from current statement(e.g. break, continue, goto)
00752         virtual void back_roll_to_compound_stmt(ptr< ss_compound_stmt > , bool , ptr< ::lestes::backend_v2::intercode::pi_sp > psp, ptr< ::lestes::backend_v2::intercode::pi_sp > nsp) abstract;
00753 
00754         //! Abnormal end of compound statement; psp,nsp shall be taken from current return statement
00755         virtual void back_roll_from_function(ptr< ::lestes::backend_v2::intercode::pi_sp > psp, ptr< ::lestes::backend_v2::intercode::pi_sp > nsp) abstract;
00756 
00757         
00758 
00759         //! for purposes of dumping
00760         virtual ptr<reflection_list> reflection_get() const;
00761         //! for purposes of dumping
00762         virtual ptr<field_list_list> field_values_get() const;
00763         
00764 protected:
00765         //! Generated constructor for class ss_destructor_tables.
00766         ss_destructor_tables (
00767                 );
00768 
00769         //! Marking routine for class ss_destructor_tables. 
00770         virtual void gc_mark();
00771 
00772 private:
00773         static ptr< ss_destructor_tables > singleton_instance;
00774         static ptr<reflection_list> reflection;
00775         
00776 }; // ss_destructor_tables
00777 
00778 
00779 class ss_destructor_tables_stack : public ss_destructor_tables {
00780 public:
00781         //! The method current_get returns the value of the field ss_destructor_tables_stack::current.
00782         static ptr< ss_destructor_table > current_get();
00783 
00784         //! The method current_set sets the field ss_destructor_tables_stack::current to the given value.
00785         static void current_set(const ptr< ss_destructor_table > &);
00786 
00787         //! The method tables_get returns the value of the field ss_destructor_tables_stack::tables.
00788         static ptr< ::lestes::std::list< srp< ss_destructor_table > > > tables_get();
00789 
00790         //! The method tables_set sets the field ss_destructor_tables_stack::tables to the given value.
00791         static void tables_set(const ptr< ::lestes::std::list< srp< ss_destructor_table > > > & );
00792 
00793         virtual ptr< ss_destructor_table > open_compound_stmt(ptr< ss_compound_stmt > );
00794 
00795         virtual ptr< ss_destructor_table > close_compound_stmt();
00796 
00797         virtual void destructor_add(ptr< ss_type > , ptr< ::lestes::backend_v2::intercode::pi_mem_factory > );
00798 
00799         virtual void destructor_add_to_destr(ptr< ss_destructor_table > , ptr< ss_type > , ptr< ::lestes::backend_v2::intercode::pi_mem_factory > );
00800 
00801         virtual void back_roll_from_current_compound_stmt();
00802 
00803         virtual void back_roll_to_compound_stmt(ptr< ss_compound_stmt > , bool , ptr< ::lestes::backend_v2::intercode::pi_sp > psp, ptr< ::lestes::backend_v2::intercode::pi_sp > nsp);
00804 
00805         virtual void back_roll_from_function(ptr< ::lestes::backend_v2::intercode::pi_sp > psp, ptr< ::lestes::backend_v2::intercode::pi_sp > nsp);
00806 
00807         
00808         //! First generated factory method for class ss_destructor_tables_stack.
00809         static ptr< ss_destructor_tables_stack > create (
00810                 );
00811 
00812         
00813 
00814         //! for purposes of dumping
00815         virtual ptr<reflection_list> reflection_get() const;
00816         //! for purposes of dumping
00817         virtual ptr<field_list_list> field_values_get() const;
00818         
00819 protected:
00820         //! Generated constructor for class ss_destructor_tables_stack.
00821         ss_destructor_tables_stack (
00822                 );
00823 
00824         //! Marking routine for class ss_destructor_tables_stack. 
00825         virtual void gc_mark();
00826 
00827 private:
00828         //! Current destructor table.
00829         static ptr< ss_destructor_table > current;
00830         //! Destructor table for each compound statement
00831         static ptr< ::lestes::std::list< srp< ss_destructor_table > > >  tables;
00832         static ptr<reflection_list> reflection;
00833         
00834 }; // ss_destructor_tables_stack
00835 
00836 
00837 //! Visitor for converting literal info to pi layer literal info.
00838 class ss_linfo2pi_linfo : public ss_literal_info_visitor {
00839 public:
00840         //! The method pinfo_get returns the value of the field ss_linfo2pi_linfo::pinfo.
00841         ptr< ::lestes::md::literals::literal_info_base > pinfo_get() const;
00842 
00843         //! The method pinfo_set sets the field ss_linfo2pi_linfo::pinfo to the given value.
00844         void pinfo_set(const ptr< ::lestes::md::literals::literal_info_base > &);
00845 
00846         virtual void visit_ss_integral_literal_info(ptr< ::lestes::lang::cplus::sem::ss_integral_literal_info > );
00847 
00848         virtual void visit_ss_floating_literal_info(ptr< ::lestes::lang::cplus::sem::ss_floating_literal_info > );
00849 
00850         virtual void visit_ss_compound_literal_info(ptr< ::lestes::lang::cplus::sem::ss_compound_literal_info > );
00851 
00852         
00853         //! First generated factory method for class ss_linfo2pi_linfo.
00854         static ptr< ss_linfo2pi_linfo > create (
00855                 ptr< ::lestes::md::literals::literal_info_base > a__ss_linfo2pi_linfo__pinfo);
00856 
00857         //! Second generated factory method for class ss_linfo2pi_linfo.
00858         static ptr< ss_linfo2pi_linfo > create (
00859                 );
00860 
00861         
00862         //! "visit-return" method
00863         ptr< ::lestes::md::literals::literal_info_base > get_pinfo( const ptr< ::lestes::lang::cplus::sem::ss_literal_info > & );
00864 
00865         //! for purposes of dumping
00866         virtual ptr<reflection_list> reflection_get() const;
00867         //! for purposes of dumping
00868         virtual ptr<field_list_list> field_values_get() const;
00869         
00870 protected:
00871         //! Generated constructor for class ss_linfo2pi_linfo.
00872         ss_linfo2pi_linfo (
00873                 ptr< ::lestes::md::literals::literal_info_base > a__ss_linfo2pi_linfo__pinfo);
00874 
00875         //! Marking routine for class ss_linfo2pi_linfo. 
00876         virtual void gc_mark();
00877 
00878 private:
00879         //! Field for storing result.
00880         srp< ::lestes::md::literals::literal_info_base > pinfo;
00881         static ptr<reflection_list> reflection;
00882         
00883 }; // ss_linfo2pi_linfo
00884 
00885 
00886 end_package(sem);
00887 end_package(cplus);
00888 end_package(lang);
00889 end_package(lestes);
00890 
00891 #endif // lestes__lang__cplus__sem__ss_ss2pi_base_g_hh__included

Generated on Mon Feb 12 18:23:30 2007 for lestes by doxygen 1.5.1-20070107