aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2013-03-01 11:15:20 +0200
committerArnold D. Robbins <arnold@skeeve.com>2013-03-01 11:15:20 +0200
commit0b59be74188529bcb0aa3476fee51a525b365391 (patch)
treeedb8cabbbbb80a4cefaf9c22448dc5d4616995c1
parent491e95a1d22995973e9d62719d321a623ed22e07 (diff)
downloadegawk-0b59be74188529bcb0aa3476fee51a525b365391.tar.gz
egawk-0b59be74188529bcb0aa3476fee51a525b365391.tar.bz2
egawk-0b59be74188529bcb0aa3476fee51a525b365391.zip
Add @load to profile/pretty printed output.
-rw-r--r--ChangeLog9
-rw-r--r--awk.h2
-rw-r--r--profile.c22
3 files changed, 33 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 65b5757f..256c52f7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/awk.h b/awk.h
index f26ec20b..989f451d 100644
--- a/awk.h
+++ b/awk.h
@@ -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 */
diff --git a/profile.c b/profile.c
index c3dea0e1..4764fe00 100644
--- a/profile.c
+++ b/profile.c
@@ -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);
}