This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU M4 source repository".

http://git.sv.gnu.org/gitweb/?p=m4.git;a=commitdiff;h=b365ac707f78650ff719f3a295ac0d4c1a6521a2

The branch, master has been updated
       via  b365ac707f78650ff719f3a295ac0d4c1a6521a2 (commit)
      from  19b3394db9c5c2f7087b5398a2319981d3f3544f (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit b365ac707f78650ff719f3a295ac0d4c1a6521a2
Author: Eric Blake <[EMAIL PROTECTED]>
Date:   Wed May 28 20:16:23 2008 -0600

    Improve frozen debugmode behavior.
    
    * m4/debug.c (m4_debug_decode): Make empty debugmode additive.
    * src/main.c (main): Interleave -d with files.
    * tests/options.at (--debugmode): Update test.
    * tests/freeze.at (reloading debugmode): New test.
    * doc/m4.texinfo (Debugging options, Debugmode): Document the
    change.
    * NEWS: Likewise.
    
    Signed-off-by: Eric Blake <[EMAIL PROTECTED]>

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog        |   11 +++++++++++
 NEWS             |    9 +++++++--
 doc/m4.texinfo   |   47 ++++++++++++++++++++++++-----------------------
 m4/debug.c       |    2 +-
 src/main.c       |   28 +++++++++++++++++++++++-----
 tests/freeze.at  |   39 +++++++++++++++++++++++++++++++++++++++
 tests/options.at |   15 ++++++++++++++-
 7 files changed, 119 insertions(+), 32 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index b0f13a2..d5eec17 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2008-05-28  Eric Blake  <[EMAIL PROTECTED]>
+
+       Improve frozen debugmode behavior.
+       * m4/debug.c (m4_debug_decode): Make empty debugmode additive.
+       * src/main.c (main): Interleave -d with files.
+       * tests/options.at (--debugmode): Update test.
+       * tests/freeze.at (reloading debugmode): New test.
+       * doc/m4.texinfo (Debugging options, Debugmode): Document the
+       change.
+       * NEWS: Likewise.
+
 2008-05-27  Eric Blake  <[EMAIL PROTECTED]>
 
        Fix some testsuite failures on Solaris 8.
diff --git a/NEWS b/NEWS
index 1391e36..9aa47db 100644
--- a/NEWS
+++ b/NEWS
@@ -30,8 +30,13 @@ promoted to 2.0.
     the include path, rather than always searching `.' first.
 
 *** The `-d'/`--debug' command-line option now understands `-' and `+'
-     modifiers, the way `debugmode' has always done.  The option
-    `--debugmode' is added as an alias for `-d'.
+    modifiers, the way the builtin `debugmode' has always done; this allows
+    `-d-V' to disable prior debug settings from the command line, similar
+    to using the builtin `debugmode' without arguments.  The option
+    `--debugmode' is added as an alias for `-d'.  When given the empty
+    string, the mode is treated as `+aeq' instead of `aeq'.  Also, the
+    position of `-d' with respect to files on the command line is now
+    significant.
 
 *** New `--debuglen' command-line option matches the spelling of a new
     macro, and the old spelling `--arglength' now issues a warning that it
diff --git a/doc/m4.texinfo b/doc/m4.texinfo
index 2048483..3540710 100644
--- a/doc/m4.texinfo
+++ b/doc/m4.texinfo
@@ -946,13 +946,16 @@ Set the debug-level according to the flags @var{FLAGS}.  
The debug-level
 controls the format and amount of information presented by the debugging
 functions.  @xref{Debugmode}, for more details on the format and
 meaning of @var{FLAGS}.  If omitted, @var{FLAGS} defaults to
[EMAIL PROTECTED]  When the option is presented multiple times, if later
[EMAIL PROTECTED]  When the option is presented multiple times, if later
 @var{FLAGS} starts with @samp{-} or @samp{+}, they are cumulative,
-otherwise the later flags override all earlier occurrences.  The
+otherwise the later flags override all earlier occurrences.  Therefore,
+to disable all previously set flags, specify an explicit @var{FLAGS} of
[EMAIL PROTECTED]  The
 spelling @option{--debug} is recognized as an unambiguous option for
 compatibility with earlier versions of @acronym{GNU} M4, but for
 consistency with the builtin name, you can also use the spelling
[EMAIL PROTECTED]
[EMAIL PROTECTED]  Order is significant with respect to
+file names.
 
 @item [EMAIL PROTECTED]
 @itemx -o @var{FILE}
@@ -4155,7 +4158,7 @@ the previous setting.
 @comment currently enabled?
 
 If no flags are specified with the @option{--debug} option, the default is
[EMAIL PROTECTED]  Many examples in this manual show their output using
[EMAIL PROTECTED]  Many examples in this manual show their output using
 default flags.
 
 @cindex @acronym{GNU} extensions
@@ -4164,10 +4167,10 @@ the debugging output format:
 
 @deffn {Builtin (gnu)} debugmode (@ovar{flags})
 The argument @var{flags} should be a subset of the letters listed above.
-If no argument is present, all debugging flags are cleared
-(as if no @option{--debug} was given), and with an empty argument the flags
-are reset to the default of @samp{aeq}.  If an unknown flag is
-encountered, an error is issued.
+If no argument is present, all debugging flags are cleared (as if
[EMAIL PROTECTED] were an explicit @samp{-V}).  With an empty argument, the
+most common flags are enabled (as if @var{flags} were an explicit
[EMAIL PROTECTED]).  If an unknown flag is encountered, an error is issued.
 
 The expansion of @code{debugmode} is void.
 @end deffn
@@ -4179,34 +4182,32 @@ define(`foo', `FOO$1')
 @result{}
 traceon(`foo', `divnum')
 @result{}
-debugmode()
[EMAIL PROTECTED]
+debugmode()dnl same as debugmode(`+aeq')
 foo
 @error{}m4trace: -1- foo -> `FOO'
 @result{}FOO
 debugmode(`V')debugmode(`-q')
[EMAIL PROTECTED]:stdin:5: -1- id 6: debugmode ... = <debugmode>@[EMAIL 
PROTECTED]
[EMAIL PROTECTED]:stdin:5: -1- id 6: debugmode(`-q') -> `'
[EMAIL PROTECTED]:stdin:5: -1- id 7: debugmode ... = <debugmode>@[EMAIL 
PROTECTED]
[EMAIL PROTECTED]:stdin:5: -1- id 7: debugmode(`-q') -> `'
 @result{}
 foo(
 `BAR')
[EMAIL PROTECTED]:stdin:6: -1- id 7: foo ... = FOO$1
[EMAIL PROTECTED]:stdin:6: -1- id 7: foo(BAR) -> FOOBAR
[EMAIL PROTECTED]:stdin:6: -1- id 8: foo ... = FOO$1
[EMAIL PROTECTED]:stdin:6: -1- id 8: foo(BAR) -> FOOBAR
 @result{}FOOBAR
-debugmode
[EMAIL PROTECTED]:stdin:8: -1- id 8: debugmode ... = <debugmode>@[EMAIL 
PROTECTED]
[EMAIL PROTECTED]:stdin:8: -1- id 8: debugmode ->@w{ }
[EMAIL PROTECTED]
+debugmode`'dnl same as debugmode(`-V')
[EMAIL PROTECTED]:stdin:8: -1- id 9: debugmode ... = <debugmode>@[EMAIL 
PROTECTED]
[EMAIL PROTECTED]:stdin:8: -1- id 9: debugmode ->@w{ }
 foo
 @error{}m4trace: -1- foo
 @result{}FOO
 debugmode(`+clmx')
 @result{}
 foo(divnum)
[EMAIL PROTECTED]:11: -1- id 11: foo ... = FOO$1
[EMAIL PROTECTED]:11: -2- id 12: divnum ... = <divnum>@[EMAIL PROTECTED]
[EMAIL PROTECTED]:11: -2- id 12: divnum
[EMAIL PROTECTED]:11: -1- id 11: foo
[EMAIL PROTECTED]:11: -1- id 13: foo ... = FOO$1
[EMAIL PROTECTED]:11: -2- id 14: divnum ... = <divnum>@[EMAIL PROTECTED]
[EMAIL PROTECTED]:11: -2- id 14: divnum
[EMAIL PROTECTED]:11: -1- id 13: foo
 @result{}FOO0
 debugmode(`-m')
 @result{}
@@ -8409,7 +8410,7 @@ comment delimiters.
 @item d @var{len} @key{NL} @var{str} @key{NL}
 Sets the debug flags, using @var{str} as the argument to
 @code{debugmode}.  If omitted, then the debug flags start in their
-default state.
+default disabled state.
 
 @item D @var{number} , @var{len} @key{NL} @var{str} @key{NL}
 Selects diversion @var{number}, making it current, then copy @var{str}
diff --git a/m4/debug.c b/m4/debug.c
index 5b54c4a..e6c8ffb 100644
--- a/m4/debug.c
+++ b/m4/debug.c
@@ -39,7 +39,7 @@ m4_debug_decode (m4 *context, int previous, const char *opts)
   char mode = '\0';
 
   if (opts == NULL || *opts == '\0')
-    level = M4_DEBUG_TRACE_DEFAULT;
+    level = M4_DEBUG_TRACE_DEFAULT | previous;
   else
     {
       if (*opts == '-' || *opts == '+')
diff --git a/src/main.c b/src/main.c
index 7690147..104c256 100644
--- a/src/main.c
+++ b/src/main.c
@@ -427,11 +427,11 @@ main (int argc, char *const *argv, char *const *envp)
        case 'p':
        case 'r':
        case 't':
-       case '\1':
        case POPDEF_OPTION:
        case SYNCOUTPUT_OPTION:
        case TRACEOFF_OPTION:
        case UNLOAD_MODULE_OPTION:
+       defer:
          /* Arguments that cannot be handled until later are accumulated.  */
 
          defn = (deferred *) xmalloc (sizeof *defn);
@@ -444,12 +444,12 @@ main (int argc, char *const *argv, char *const *envp)
          else
            tail->next = defn;
          tail = defn;
-
-         if (optchar == '\1')
-           seen_file = true;
-
          break;
 
+       case '\1':
+         seen_file = true;
+         goto defer;
+
        case 'B':
          /* In 1.4.x, -B<num> was a no-op option for compatibility with
             Solaris m4.  Warn if optarg is all numeric.  FIXME -
@@ -537,6 +537,11 @@ main (int argc, char *const *argv, char *const *envp)
          break;
 
        case 'd':
+          /* Staggered handling of 'd', since -dm is useful prior to
+             first file and prior to reloading, but other -d must also
+             have effect between files.  */
+         if (seen_file || frozen_file_to_read)
+           goto defer;
          {
            int old = m4_get_debug_level_opt (context);
            m4_set_debug_level_opt (context, m4_debug_decode (context, old,
@@ -702,6 +707,19 @@ main (int argc, char *const *argv, char *const *envp)
          m4_symbol_delete (M4SYMTAB, arg);
          break;
 
+       case 'd':
+         {
+           int old = m4_get_debug_level_opt (context);
+           m4_set_debug_level_opt (context, m4_debug_decode (context, old,
+                                                             arg));
+         }
+         if (m4_get_debug_level_opt (context) < 0)
+           {
+             error (0, 0, _("bad debug flags: `%s'"), arg);
+             m4_set_debug_level_opt (context, 0);
+           }
+         break;
+
        case 'm':
          /* FIXME - should loading a module result in output?  */
          m4_module_load (context, arg, NULL);
diff --git a/tests/freeze.at b/tests/freeze.at
index fd1981b..44de59d 100644
--- a/tests/freeze.at
+++ b/tests/freeze.at
@@ -338,6 +338,45 @@ define{`a.b', `hello $1'}dnl
 ]])
 
 ## --------- ##
+## debugmode ##
+## --------- ##
+
+# Check that debugmode can be preserved, and how it interacts with -d
+AT_SETUP([reloading debugmode])
+AT_KEYWORDS([frozen])
+
+AT_DATA([frozen.m4],
+[[debugmode(`fl')dnl
+]])
+AT_DATA([unfrozen.m4],
+[[traceon(`len')len(`a')
+]])
+
+AT_CHECK_M4([-F frozen.m4f -d-V frozen.m4], [0])
+
+dnl With no -d option, use the frozen file
+AT_CHECK_M4([-R frozen.m4f unfrozen.m4], [0], [[1
+]], [[m4trace:unfrozen.m4:1: -1- len
+]], [], [ ])
+
+dnl With plain -d before -R, use the frozen file
+AT_CHECK_M4([-R frozen.m4f unfrozen.m4], [0], [[1
+]], [[m4trace:unfrozen.m4:1: -1- len
+]])
+
+dnl With plain -d after -R, add +aeq to the frozen file
+AT_CHECK_M4([-R frozen.m4f -d unfrozen.m4], [0], [[1
+]], [[m4trace:unfrozen.m4:1: -1- len(`a') -> `1'
+]], [], [ ])
+
+dnl With explicit -d option, override frozen file
+AT_CHECK_M4([-R frozen.m4f -de unfrozen.m4], [0], [[1
+]], [[m4trace: -1- len -> 1
+]])
+
+AT_CLEANUP
+
+## --------- ##
 ## nul bytes ##
 ## --------- ##
 
diff --git a/tests/options.at b/tests/options.at
index 19b8874..5484f14 100644
--- a/tests/options.at
+++ b/tests/options.at
@@ -371,12 +371,25 @@ AT_DATA([[nested]],
 ')dnl
 ]])
 
-dnl AT_CHECK_M4 starts life with -d.  Make sure it looks like -daeq.
+dnl AT_CHECK_M4 starts life with -d.  Make sure it looks like -d+aeq.
 AT_CHECK_M4([-tlen in], [0], [[3
 0
 ]], [[m4trace: -1- len(`abc') -> `3'
 ]])
 
+AT_CHECK_M4([-tlen -dfl -d in], [0], [[3
+0
+]], [[m4trace:in:2: -1- len(`abc') -> `3'
+]])
+
+dnl -d after file is deferred (but this is still useful for some flags).
+AT_CHECK_M4([-tlen in -dfli], [0], [[3
+0
+]], [[m4trace: -1- len(`abc') -> `3'
+m4debug: input from m4wrap recursion level 1
+m4debug: input from m4wrap exhausted
+]])
+
 dnl Test all flags.
 AT_CHECK_M4([-dV in], [0], [[3
 0


hooks/post-receive
--
GNU M4 source repository


Reply via email to