m4-commit@gnu.org
[Top] [All Lists]

Changes to m4/m4/debug.c,v

Subject: Changes to m4/m4/debug.c,v
From: Eric Blake
Date: Wed, 23 Aug 2006 11:39:28 +0000
CVSROOT:        /sources/m4
Module name:    m4
Changes by:     Eric Blake <ericb>      06/08/23 11:39:26

Index: m4/debug.c
===================================================================
RCS file: /sources/m4/m4/m4/debug.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -b -r1.22 -r1.23
--- m4/debug.c  22 Aug 2006 22:36:28 -0000      1.22
+++ m4/debug.c  23 Aug 2006 11:39:26 -0000      1.23
@@ -29,14 +29,17 @@
 /* Function to decode the debugging flags OPTS.  Used by main while
    processing option -d, and by the builtin debugmode ().  */
 int
-m4_debug_decode (m4 *context, const char *opts)
+m4_debug_decode (m4 *context, int previous, const char *opts)
 {
   int level;
+  char mode = '\0';
 
   if (opts == NULL || *opts == '\0')
     level = M4_DEBUG_TRACE_DEFAULT;
   else
     {
+      if (*opts == '-' || *opts == '+')
+       mode = *opts++;
       for (level = 0; *opts; opts++)
        {
          switch (*opts)
@@ -97,6 +100,26 @@
   obstack_free (&context->trace_messages,
                obstack_finish (&context->trace_messages));
 
+  switch (mode)
+    {
+    case '\0':
+      /* Replace old level.  */
+      break;
+
+    case '-':
+      /* Subtract flags.  */
+      level = previous & ~level;
+      break;
+
+    case '+':
+      /* Add flags.  */
+      level |= previous;
+      break;
+
+    default:
+      assert (!"INTERNAL ERROR: impossible mode from flags");
+    }
+
   return level;
 }
 
@@ -179,4 +202,5 @@
       if (m4_is_debug_bit (context, M4_DEBUG_TRACE_LINE))
        fprintf (debug_file, "%d:", m4_get_current_line (context));
     }
+  putc (' ', debug_file);
 }


<Prev in Thread] Current Thread [Next in Thread>