diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2013-03-01 11:15:20 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2013-03-01 11:15:20 +0200 |
commit | 0b59be74188529bcb0aa3476fee51a525b365391 (patch) | |
tree | edb8cabbbbb80a4cefaf9c22448dc5d4616995c1 | |
parent | 491e95a1d22995973e9d62719d321a623ed22e07 (diff) | |
download | egawk-0b59be74188529bcb0aa3476fee51a525b365391.tar.gz egawk-0b59be74188529bcb0aa3476fee51a525b365391.tar.bz2 egawk-0b59be74188529bcb0aa3476fee51a525b365391.zip |
Add @load to profile/pretty printed output.
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | awk.h | 2 | ||||
-rw-r--r-- | profile.c | 22 |
3 files changed, 33 insertions, 0 deletions
@@ -1,3 +1,12 @@ +2013-02-28 Arnold D. Robbins <arnold@skeeve.com> + + Cause profiling / pretty printing to include a list of + loaded extensions. Thanks to Hermann Peifer for the bug report. + + * awk.h (srcfiles): Add declaration. + * profile.c (print_lib_list): New function. + (dump_prog): Call it. + 2013-02-26 Arnold D. Robbins <arnold@skeeve.com> * parse.y (expression_list): In case of error return the list @@ -1065,6 +1065,8 @@ extern bool field0_valid; extern int do_flags; +extern SRCFILE *srcfiles; /* source files */ + enum do_flag_values { DO_LINT_INVALID = 0x0001, /* only warn about invalid */ DO_LINT_ALL = 0x0002, /* warn about all things */ @@ -927,6 +927,27 @@ dump_and_exit(int signum) final_exit(EXIT_FAILURE); } +/* print_lib_list --- print a list of all libraries loaded */ + +static void +print_lib_list(FILE *prof_fp) +{ + SRCFILE *s; + static bool printed_header = false; + + + for (s = srcfiles->next; s != srcfiles; s = s->next) { + if (s->stype == SRC_EXTLIB) { + if (! printed_header) { + printed_header = true; + fprintf(prof_fp, _("\t# Loaded extensions (-l and/or @load)\n\n")); + } + fprintf(prof_fp, "\t@load \"%s\"\n", s->src); + } + } + if (printed_header) /* we found some */ + printf("\n"); +} /* dump_prog --- dump the program */ @@ -943,6 +964,7 @@ dump_prog(INSTRUCTION *code) (void) time(& now); /* \n on purpose, with \n in ctime() output */ fprintf(prof_fp, _("\t# gawk profile, created %s\n"), ctime(& now)); + print_lib_list(prof_fp); pprint(code, NULL, false); } |