bug-gawk
[Top][All Lists]
Advanced

[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);
 }
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]