[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [bug-gawk] @load directive is not copied into awkprof.out
From: |
arnold |
Subject: |
Re: [bug-gawk] @load directive is not copied into awkprof.out |
Date: |
Thu, 28 Feb 2013 06:55:50 -0700 |
User-agent: |
Heirloom mailx 12.4 7/29/08 |
Hi. Thanks for the bug report.
Hermann Peifer <address@hidden> wrote:
> Hi,
>
> I noted that the @load directive is not copied into awkprof.out, see
> below. I am not sure if this is a feature or rather a (minor) bug, but I
> thought it would be worth reporting.
>
> Regards, Hermann
>
> -----------------
>
> $ gawk -V | head -1
> GNU Awk 4.0.73, API: 0.0 (GNU MPFR 3.1.1-p2, GNU MP 5.0.5)
>
> $ gawk -o '@load "ordchr"; BEGIN {print chr(65)}' > /dev/null && cat
> awkprof.out
> # gawk profile, created Wed Feb 27 17:39:25 2013
>
> # BEGIN block(s)
>
> BEGIN {
> print chr(65)
> }
It's a minor bug. This patch fixes it. I will push it later. Thank you
for the bug report!
Arnold
--------------------------------------------------
diff --git a/ChangeLog b/ChangeLog
index 65b5757..256c52f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2013-02-28 Arnold D. Robbins <address@hidden>
+
+ 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 <address@hidden>
* parse.y (expression_list): In case of error return the list
diff --git a/awk.h b/awk.h
index f26ec20..989f451 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 c3dea0e..4764fe0 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, "address@hidden \"%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);
}