m4-commit
[Top][All Lists]
Advanced

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

Changes to m4/modules/m4.c,v


From: Eric Blake
Subject: Changes to m4/modules/m4.c,v
Date: Tue, 26 Sep 2006 21:21:52 +0000

CVSROOT:        /sources/m4
Module name:    m4
Changes by:     Eric Blake <ericb>      06/09/26 21:21:50

Index: modules/m4.c
===================================================================
RCS file: /sources/m4/m4/modules/m4.c,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -b -r1.72 -r1.73
--- modules/m4.c        26 Sep 2006 13:19:26 -0000      1.72
+++ modules/m4.c        26 Sep 2006 21:21:50 -0000      1.73
@@ -305,16 +305,22 @@
 dump_symbol_CB (m4_symbol_table *ignored, const char *name, m4_symbol *symbol,
                void *userdata)
 {
+  m4_dump_symbol_data *symbol_data = (m4_dump_symbol_data *) userdata;
+
   assert (name);
   assert (symbol);
+  assert (!m4_is_symbol_value_void (m4_get_symbol_value (symbol)));
 
-  if (!m4_is_symbol_value_void (m4_get_symbol_value (symbol)))
+  if (symbol_data->size == 0)
     {
-      m4_dump_symbol_data *symbol_data = (m4_dump_symbol_data *) userdata;
-
-      obstack_blank (symbol_data->obs, sizeof (const char *));
-      symbol_data->base = (const char **) obstack_base (symbol_data->obs);
-      symbol_data->base[symbol_data->size++] = (const char *) name;
+      obstack_ptr_grow (symbol_data->obs, name);
+      symbol_data->size = (obstack_room (symbol_data->obs)
+                          / sizeof (const char *));
+    }
+  else
+    {
+      obstack_ptr_grow_fast (symbol_data->obs, name);
+      symbol_data->size--;
     }
 
   return NULL;
@@ -326,8 +332,7 @@
 m4_dump_symbols (m4 *context, m4_dump_symbol_data *data, int argc,
                 m4_symbol_value **argv, bool complain)
 {
-  data->base = (const char **) obstack_base (data->obs);
-  data->size = 0;
+  data->size = obstack_room (data->obs) / sizeof (const char *);
 
   if (argc == 1)
     {
@@ -341,19 +346,17 @@
       for (i = 1; i < argc; i++)
        {
          symbol = m4_symbol_lookup (M4SYMTAB, M4ARG (i));
-         if (symbol != NULL
-             && !m4_is_symbol_value_void (m4_get_symbol_value (symbol)))
-           {
+         if (symbol != NULL)
              dump_symbol_CB (NULL, M4ARG (i), symbol, data);
-           }
          else if (complain)
            m4_warn (context, 0, _("%s: undefined macro `%s'"),
                     M4ARG (0), M4ARG (i));
        }
     }
 
-  obstack_finish (data->obs);
-  qsort ((void*) data->base, data->size, sizeof (const char*), dumpdef_cmp_CB);
+  data->size = obstack_object_size (data->obs) / sizeof (const char *);
+  data->base = (const char **) obstack_finish (data->obs);
+  qsort (data->base, data->size, sizeof (const char *), dumpdef_cmp_CB);
 }
 
 
@@ -362,7 +365,10 @@
 M4BUILTIN_HANDLER (dumpdef)
 {
   m4_dump_symbol_data data;
-  const m4_builtin *bp;
+  bool quote = m4_is_debug_bit (context, M4_DEBUG_TRACE_QUOTE);
+  bool stack = m4_is_debug_bit (context, M4_DEBUG_TRACE_STACK);
+  const char *lquote = m4_get_syntax_lquote (M4SYNTAX);
+  const char *rquote = m4_get_syntax_rquote (M4SYNTAX);
 
   data.obs = obs;
   m4_dump_symbols (context, &data, argc, argv, true);
@@ -370,37 +376,18 @@
   for (; data.size > 0; --data.size, data.base++)
     {
       m4_symbol *symbol = m4_symbol_lookup (M4SYMTAB, data.base[0]);
+      assert (symbol);
 
-      fprintf (stderr, "%s:\t", data.base[0]);
-
-      if (m4_is_symbol_text (symbol))
-       {
-         if (m4_get_debug_level_opt (context) & M4_DEBUG_TRACE_QUOTE)
-           fprintf (stderr, "%s%s%s\n",
-                    m4_get_syntax_lquote (M4SYNTAX),
-                    m4_get_symbol_text (symbol),
-                    m4_get_syntax_rquote (M4SYNTAX));
-         else
-           fprintf (stderr, "%s\n", m4_get_symbol_text (symbol));
-       }
-      else if (m4_is_symbol_func (symbol))
-       {
-         bp = m4_builtin_find_by_func (NULL,
-                                       m4_get_symbol_func (symbol));
-         assert (bp);
-         fprintf (stderr, "<%s>\n", bp->name);
-       }
-      else if (m4_is_symbol_placeholder (symbol))
-       {
-         fprintf (stderr, "<placeholder for %s>\n",
-                  m4_get_symbol_placeholder (symbol));
-       }
-      else
-       {
-         assert (!"invalid token in builtin_dumpdef");
-         abort ();
-       }
+      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);
+      obstack_1grow (obs, '\n');
     }
+
+  obstack_1grow (obs, '\0');
+  m4_sysval_flush (context);
+  fputs ((char *) obstack_finish (obs), stderr);
 }
 
 /* The macro "defn" returns the quoted definition of the macro named by




reply via email to

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