00001 #include <lestes/backend_v2/structs/func_data.g.hh> 00002 #include <lestes/backend_v2/workers/body_preprocessor.g.hh> 00003 #include <lestes/backend_v2/intercode/ge.g.hh> 00004 #include <lestes/backend_v2/intercode/visitor_pi_pi2id.g.hh> 00005 #include <lestes/md/symbols/symbol_register.g.hh> 00006 #include <lestes/lang/cplus/sem/ss_declaration.g.hh> 00007 00008 package(lestes); 00009 package(backend_v2); 00010 package(workers); 00011 00012 using namespace ::lestes::backend_v2::intercode; 00013 using namespace ::lestes::backend_v2::structs; 00014 using namespace ::lestes::md::symbols; 00015 00016 typedef list<srp<ge_pi> > ge_pi_list__type; 00017 00018 /*! 00019 \brief Preprocesses a function body. 00020 00021 For now, it just registers all function calls in symbol_register. 00022 */ 00023 void body_preprocessor::process() { 00024 00025 ptr<ge_pi_list__type> body = data_get()->ge_body_get(); 00026 00027 for(ge_pi_list__type::iterator it = body->begin(); it!=body->end(); ++it) { 00028 00029 ptr<ge_pi> ge = *it; 00030 00031 if ( ge->kind_get()==ge_pi::CALL ) { 00032 symbol_register::instance()->register_symbol(ge.dncast<ge_call>()->function_decl_get()); 00033 } 00034 } 00035 } 00036 00037 00038 /*! 00039 \brief Returns preprocessed function body. 00040 */ 00041 ptr<func_data> body_preprocessor::get_result() { 00042 return data_get(); 00043 } 00044 00045 00046 00047 end_package(workers); 00048 end_package(backend_v2); 00049 end_package(lestes); 00050
1.5.1-20070107