body_preprocessor.cc

Go to the documentation of this file.
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 

Generated on Mon Feb 12 18:22:32 2007 for lestes by doxygen 1.5.1-20070107