void g95_dump(g95_namespace *ns) { if (dump_file == NULL && getenv("G95_DUMP") != NULL) init_dump(); if (dump_file != NULL) dump_ns(ns); }
/*! Used to dump out a record to a std::ostream object. \param strm std::ostream to write to \param ptr Resource base object to dump */ static void dump_record ( std::ostream& strm, dns::resource_base_t * ptr ) { switch( ptr->rtype() ) { case dns::type_a: dump_a(strm, ptr); break; case dns::type_ns: dump_ns(strm, ptr); break; case dns::type_cname: dump_cname(strm, ptr); break; case dns::type_soa: dump_soa(strm, ptr); break; case dns::type_ptr: dump_ptr(strm, ptr); break; case dns::type_hinfo: dump_hinfo(strm, ptr); break; case dns::type_mx: dump_mx(strm, ptr); break; case dns::type_txt: dump_text(strm, ptr); break; case dns::type_a6: dump_a6(strm, ptr); break; case dns::type_srv: dump_srv(strm, ptr); break; default: strm << "Unhandled record type!" << std::endl; break; } }
static void dump_ns(g95_namespace *ns) { g95_symbol *sym, *result; g95_namespace *p, *save; g95_locus *where; g95_annot *a; int m, rank; save = g95_current_ns; g95_current_ns = ns; where = &ns->declared_at; sym = ns->proc_name; switch(ns->state) { case COMP_PROGRAM: if (ns->unit_name == NULL) dumpf("program(None, %L)\n", where); else dumpf("program(%S,%L)\n", ns->unit_name, where); break; case COMP_MODULE: dumpf("module(%S,%L,%L)\n", sym->name, where, &ns->proc_name->declared_at); break; case COMP_SUBROUTINE: dumpf("subroutine(%S,%S,%L,", sym->name, sym->module, &ns->proc_name->declared_at); dump_formal(ns->proc_name); dumpf(")\n"); break; case COMP_FUNCTION: result = sym->result; rank = (result->as == NULL) ? 0 : result->as->rank; dumpf("function(%S,%S,%L,%S,%d,%d,", sym->name, sym->module, &ns->proc_name->declared_at, g95_typename(&result->ts), rank, result->attr.pointer); dump_formal(ns->proc_name); dumpf(")\n"); break; case COMP_BLOCK_DATA: if (ns->proc_name->name == NULL) dumpf("block_data(None,%L)\n", where); else dumpf("block_data(%S,%L)\n", sym->name, where); break; case COMP_NONE: return; default: g95_internal_error("dump_ns(): Bad state"); } g95_traverse_symtree(ns, g95_clear_sym_mark); g95_traverse_symtree(ns, dump_symtree); dump_common(ns->common_root); for(a=ns->annotation; a; a=a->next) switch(a->type) { case ANNOT_PARAMETER: dumpf("parameter_use(%p,%L)\n", a->u.sym, &a->where); break; case ANNOT_DERIVED: dumpf("derived_use(%p,%L)\n", a->u.sym, &a->where); break; case ANNOT_LABEL: dumpf("label_use(%p,%L)\n", a->u.sym, &a->where); break; case ANNOT_OPERATOR: dumpf("operator_use(%p,%L)\n", a->u.sym, &a->where); break; default: g95_internal_error("init_dump(): Bad type"); } m = dump_code(ns->code); dumpf("add_code(%C)\n", m); if (m != 0) dumpf("del %C\n", m); for(p=ns->contained; p; p=p->sibling) dump_ns(p); dumpf("end()\n"); g95_current_ns = save; }