Ejemplo n.º 1
0
list<ProcedureSymbol*> *
get_procedure_list(FileSetBlock *file_set,
                   bool flag_exported,
                   bool flag_static,
                   bool flag_nested,
                   bool flag_def_only)
{
  list<ProcedureSymbol*> *procs = new list<ProcedureSymbol*>;
  FileSetBlock *fsb = file_set;

  // no file_set_block sepcified
  if (!fsb) return procs;

  // =============== exported procedures ================
  if (flag_exported)
    add_to_procedure_list(procs,
                          fsb->get_external_symbol_table(), flag_def_only);

  // =============== static procedures ==================
  if (flag_static) {
    // add the symbols in the static fileset symbol table
    add_to_procedure_list(procs,
                          fsb->get_file_set_symbol_table(), flag_def_only);
    // iterate over the files and add their symbol tables
    for (int i = 0; i < fsb->get_file_block_count(); ++i) {
      FileBlock *file_block = fsb->get_file_block(i);
      add_to_procedure_list(procs,
                            file_block->get_symbol_table(), flag_def_only);
    }
  }

  // =============== nested procedures ==================
  if ( flag_nested ) {
    // iterate over the files
    for (int i=0; i < fsb->get_file_block_count(); ++i) {
      FileBlock *file_block = fsb->get_file_block(i);
      DefinitionBlock * def_block = file_block->get_definition_block();
      // iterate over the procedures
      s_count_t count = def_block->get_procedure_definition_count();
      for (s_count_t proc_counter=0; proc_counter < count; ++proc_counter) {
        ProcedureDefinition *proc = def_block->get_procedure_definition(i);
        add_to_procedure_list(procs, proc, flag_def_only );
      }
    }
  }
  return procs;
}