m4-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: dumpdef a pushdef'd stack


From: Eric Blake
Subject: Re: dumpdef a pushdef'd stack
Date: Wed, 27 Sep 2006 22:21:18 -0600
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 Thunderbird/1.5.0.7 Mnenhy/0.7.4.666

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

According to Eric Blake on 9/27/2006 7:25 AM:
> Another followup patch that I just thought of - it would be nice if the
> 'm' debug flag altered the dumpdef output to show WHICH module provided
> the various builtins.

Wow, this turned out rather nice when playing with modules!  -dm is
turning out to be rather useful.

2006-09-27  Eric Blake  <address@hidden>

        * m4/m4module.h (m4_symbol_value_print, m4_symbol_print): Add
        another parameter to print module info.
        * m4/macro.c (trace_pre): Adjust caller.
        * modules/m4.c (M4BUILTIN_HANDLER): Likewise.
        * doc/m4.texinfo (Dumpdef, Debug Levels): Document this.
        * NEWS: Document this.

- --
Life is short - so eat dessert first!

Eric Blake             address@hidden
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.1 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFFG02+84KuGfSFAYARAp3PAKCYku5/rfLMSRMNHBRdGcGUhK6dkgCgrAkU
5Q8Xlb6X4klE90MlA0xbJFo=
=0myZ
-----END PGP SIGNATURE-----
Index: NEWS
===================================================================
RCS file: /sources/m4/m4/NEWS,v
retrieving revision 1.21
diff -u -p -r1.21 NEWS
--- NEWS        27 Sep 2006 13:21:05 -0000      1.21
+++ NEWS        28 Sep 2006 03:47:18 -0000
@@ -59,10 +59,11 @@ promoted to 2.0.
   standard error are terminals.
 
 * New `m' flag to `-d'/`--debug' option or `debugmode' macro traces
-  actions related to module loading and unloading.  New `s' flag shows the
-  entire stack of `pushdef' definitions during `dumpdef'.  Also, the
-  `--debug' option now understands `-' and `+' modifiers, the way
-  `debugmode' has always done.
+  actions related to module loading and unloading, and affects `dumpdef'
+  output to show where builtins come from.  New `s' flag shows the entire
+  stack of `pushdef' definitions during `dumpdef'.  Also, the `--debug'
+  option now understands `-' and `+' modifiers, the way `debugmode' has
+  always done.
 
 * The semantics of `traceon' and `traceoff' now match traditional
   implementations: when called without arguments, they affect global state
Index: doc/m4.texinfo
===================================================================
RCS file: /sources/m4/m4/doc/m4.texinfo,v
retrieving revision 1.53
diff -u -p -r1.53 m4.texinfo
--- doc/m4.texinfo      27 Sep 2006 13:21:05 -0000      1.53
+++ doc/m4.texinfo      28 Sep 2006 03:47:20 -0000
@@ -2642,12 +2642,12 @@ f(popdef(`f')dumpdef(`f'))
 @result{}f1
 @end example
 
address@hidden Levels}, for information on how the @samp{q} and @samp{s}
-flags affect the details of the display.  Remember, the @samp{q} flag is
-implied when the @option{--debug} option (@option{-d}, @pxref{Invoking
-m4}) is used in the command line without arguments.  Also, the
address@hidden option (@option{-l}) can affect output, by
-truncating longer strings.
address@hidden Levels}, for information on how the @samp{m}, @samp{q}, and
address@hidden flags affect the details of the display.  Remember, the
address@hidden flag is implied when the @option{--debug} option (@option{-d},
address@hidden m4}) is used in the command line without arguments.
+Also, the @option{--arglength} option (@option{-l}) can affect output,
+by truncating longer strings.
 
 @comment options: -ds -l3
 @example
@@ -2658,8 +2658,15 @@ pushdef(`foo', defn(`divnum'))
 @result{}
 pushdef(`foo', `3')
 @result{}
-dumpdef(`foo')
address@hidden:@tabchar{}3, <div...>, 1 l...
+debugmode(`+m')
address@hidden
+dumpdef(`foo', `dnl', `indir', `__gnu__')
address@hidden:@address@hidden@}
address@hidden:@tabchar{}<dnl>@address@hidden
address@hidden:@tabchar{}3, <div...>@address@hidden, 1 l...
address@hidden:@tabchar{}<ind...>@address@hidden
address@hidden
+debugmode(`-m')
 @result{}
 @end example
 
@@ -2919,7 +2926,8 @@ output line.
 
 @item m
 In debug output, print a message each time a module is manipulated
-(@pxref{Modules}).
+(@pxref{Modules}).  In dumpdef output, follow builtin macros with their
+module name, surrounded by braces (@address@hidden@}}).
 
 @item p
 In debug output, print a message when a named file is found through the
Index: m4/m4module.h
===================================================================
RCS file: /sources/m4/m4/m4/m4module.h,v
retrieving revision 1.88
diff -u -p -r1.88 m4module.h
--- m4/m4module.h       27 Sep 2006 13:21:05 -0000      1.88
+++ m4/m4module.h       28 Sep 2006 03:47:20 -0000
@@ -217,10 +217,11 @@ extern bool               m4_get_symbol_traced      (m4_
 extern bool            m4_set_symbol_name_traced (m4_symbol_table*,
                                                   const char *, bool);
 extern void    m4_symbol_value_print   (m4_symbol_value *, m4_obstack *, bool,
-                                        const char *, const char *, size_t);
+                                        const char *, const char *, size_t,
+                                        bool);
 extern void    m4_symbol_print         (m4_symbol *, m4_obstack *, bool,
                                         const char *, const char *, bool,
-                                        size_t);
+                                        size_t, bool);
 
 #define m4_is_symbol_void(symbol)                                      \
        (m4_is_symbol_value_void (m4_get_symbol_value (symbol)))
Index: m4/macro.c
===================================================================
RCS file: /sources/m4/m4/m4/macro.c,v
retrieving revision 1.55
diff -u -p -r1.55 macro.c
--- m4/macro.c  27 Sep 2006 13:21:05 -0000      1.55
+++ m4/macro.c  28 Sep 2006 03:47:20 -0000
@@ -618,6 +618,7 @@ trace_pre (m4 *context, const char *name
       const char *lquote = m4_get_syntax_lquote (M4SYNTAX);
       const char *rquote = m4_get_syntax_rquote (M4SYNTAX);
       size_t arg_length = m4_get_max_debug_arg_length_opt (context);
+      bool module = m4_is_debug_bit (context, M4_DEBUG_TRACE_MODULE);
 
       trace_format (context, "(");
       for (i = 1; i < argc; i++)
@@ -626,7 +627,7 @@ trace_pre (m4 *context, const char *name
            trace_format (context, ", ");
 
          m4_symbol_value_print (argv[i], &context->trace_messages,
-                                quote, lquote, rquote, arg_length);
+                                quote, lquote, rquote, arg_length, module);
        }
       trace_format (context, ")");
     }
Index: m4/symtab.c
===================================================================
RCS file: /sources/m4/m4/m4/symtab.c,v
retrieving revision 1.62
diff -u -p -r1.62 symtab.c
--- m4/symtab.c 27 Sep 2006 13:21:05 -0000      1.62
+++ m4/symtab.c 28 Sep 2006 03:47:20 -0000
@@ -464,11 +464,12 @@ m4_set_symbol_name_traced (m4_symbol_tab
 
 /* Grow OBS with a text representation of VALUE.  If QUOTE, then
    surround a text definition by LQUOTE and RQUOTE.  If ARG_LENGTH is
-   non-zero, then truncate text definitions to that length.  */
+   non-zero, then truncate text definitions to that length.  If
+   MODULE, then include which module defined a builtin.  */
 void
 m4_symbol_value_print (m4_symbol_value *value, m4_obstack *obs, bool quote,
                       const char *lquote, const char *rquote,
-                      size_t arg_length)
+                      size_t arg_length, bool module)
 {
   const char *text;
   size_t len;
@@ -509,17 +510,25 @@ m4_symbol_value_print (m4_symbol_value *
     obstack_grow (obs, "...", 3);
   if (quote)
     obstack_grow (obs, rquote, strlen (rquote));
+  if (module && VALUE_HANDLE (value))
+    {
+      obstack_1grow (obs, '{');
+      text = m4_get_module_name (VALUE_HANDLE (value));
+      obstack_grow (obs, text, strlen (text));
+      obstack_1grow (obs, '}');
+    }
 }
 
 /* Grow OBS with a text representation of SYMBOL.  If QUOTE, then
    surround each text definition by LQUOTE and RQUOTE.  If STACK, then
    append all pushdef'd values, rather than just the top.  If
    ARG_LENGTH is non-zero, then truncate text definitions to that
-   length.  */
+   length.  If MODULE, then include which module defined a
+   builtin.  */
 void
 m4_symbol_print (m4_symbol *symbol, m4_obstack *obs, bool quote,
                 const char *lquote, const char *rquote, bool stack,
-                size_t arg_length)
+                size_t arg_length, bool module)
 {
   m4_symbol_value *value;
 
@@ -527,7 +536,8 @@ m4_symbol_print (m4_symbol *symbol, m4_o
   assert (obs);
 
   value = m4_get_symbol_value (symbol);
-  m4_symbol_value_print (value, obs, quote, lquote, rquote, arg_length);
+  m4_symbol_value_print (value, obs, quote, lquote, rquote, arg_length,
+                        module);
   if (stack)
     {
       value = VALUE_NEXT (value);
@@ -536,7 +546,7 @@ m4_symbol_print (m4_symbol *symbol, m4_o
          obstack_1grow (obs, ',');
          obstack_1grow (obs, ' ');
          m4_symbol_value_print (value, obs, quote, lquote, rquote,
-                                arg_length);
+                                arg_length, module);
          value = VALUE_NEXT (value);
        }
     }
Index: modules/m4.c
===================================================================
RCS file: /sources/m4/m4/modules/m4.c,v
retrieving revision 1.75
diff -u -p -r1.75 m4.c
--- modules/m4.c        27 Sep 2006 13:21:05 -0000      1.75
+++ modules/m4.c        28 Sep 2006 03:47:20 -0000
@@ -371,6 +371,7 @@ M4BUILTIN_HANDLER (dumpdef)
   const char *rquote = m4_get_syntax_rquote (M4SYNTAX);
   bool stack = m4_is_debug_bit (context, M4_DEBUG_TRACE_STACK);
   size_t arg_length = m4_get_max_debug_arg_length_opt (context);
+  bool module = m4_is_debug_bit (context, M4_DEBUG_TRACE_MODULE);
 
   data.obs = obs;
   m4_dump_symbols (context, &data, argc, argv, true);
@@ -383,7 +384,8 @@ M4BUILTIN_HANDLER (dumpdef)
       obstack_grow (obs, data.base[0], strlen (data.base[0]));
       obstack_1grow (obs, ':');
       obstack_1grow (obs, '\t');
-      m4_symbol_print (symbol, obs, quote, lquote, rquote, stack, arg_length);
+      m4_symbol_print (symbol, obs, quote, lquote, rquote, stack, arg_length,
+                      module);
       obstack_1grow (obs, '\n');
     }
 

reply via email to

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