void add_to_procedure_list(list<ProcedureSymbol*> *&procs, SymbolTable *table, bool flag_def_only) { assert( table ); assert( procs ); Iter<SymbolTableObject*> symbols_iter = table->get_symbol_table_object_iterator(); for ( ; symbols_iter.is_valid(); symbols_iter.next() ) { SymbolTableObject* s = symbols_iter.current(); if (s && s->isKindOf(ProcedureSymbol::get_class_name())) { ProcedureSymbol* sym = to<ProcedureSymbol>(s); if (flag_def_only && sym->get_definition() == 0) continue; // insert sorted const char *proc_name = sym->get_name().c_str(); //list<ProcedureSymbol*>::iterator it = procs->begin(); unsigned i; for (i = 0; i < procs->size(); ++i) { if (strcmp((*procs)[i]->get_name().c_str(), proc_name) > 0) break; } if (i == procs->size()) { procs->push_back(sym); } else { procs->insert(i-1, sym); } } } }
ProcedureSymbol* RemoveModulePass::FindProcedure(String name) { assert(repository != NULL) ; SymbolTable* symTab = repository->get_external_symbol_table() ; for (int i = 0 ; i < symTab->get_symbol_table_object_count() ; ++i) { ProcedureSymbol* nextProc = dynamic_cast<ProcedureSymbol*>(symTab->get_symbol_table_object(i)) ; if (nextProc != NULL && nextProc->get_name() == name) { return nextProc ; } } return NULL ; }
/*-------------------------------------------------------------------- * add_std_proc_menu * */ void add_std_proc_menu(vmenu* root_menu, char* parent_menu) { const unsigned max_procs = 10; list<ProcedureSymbol*> *bodies = get_procedure_list(suif_env->get_file_set_block()); if (bodies->size() <= max_procs) { for (s_count_t i = 0; i < bodies->size(); i++) { ProcedureSymbol *proc = (*bodies)[i]; binding *b = new binding((bfun) &do_show_proc, proc); root_menu->add_command(b, parent_menu, proc->get_name().c_str() ); } root_menu->add_separator(parent_menu); } /* add procedure list command to the menu */ binding *b = new binding((bfun) &do_show_proc_list, 0); root_menu->add_command(b, parent_menu, "Procedure List ..."); }
static String handle_static_procedure_symbol(CPrintStyleModule *map, const SuifObject *obj) { ProcedureSymbol *ps = to<ProcedureSymbol>(obj); return(String("P:") + ps->get_name()); }