m4-commit
[Top][All Lists]
Advanced

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

[SCM] GNU M4 source repository branch, master, updated. 8cdf04b3b237b971


From: Eric Blake
Subject: [SCM] GNU M4 source repository branch, master, updated. 8cdf04b3b237b97163652f52b32ecb17679e2a27
Date: Thu, 18 Oct 2007 16:45:26 +0000

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=8cdf04b3b237b97163652f52b32ecb17679e2a27

The branch, master has been updated
       via  8cdf04b3b237b97163652f52b32ecb17679e2a27 (commit)
      from  394083c7c6df499eedb10173ac838aced7d00a34 (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 8cdf04b3b237b97163652f52b32ecb17679e2a27
Author: Eric Blake <address@hidden>
Date:   Thu Oct 18 10:45:16 2007 -0600

    Fix 'm4 -F file -t undefined'.
    
    * src/freeze.c (produce_symbol_dump): Skip trace placeholders.
    * src/freeze.c (dump_symbol_CB): Also skip void symbols.
    * tests/freeze.at (reloading unknown builtin): Test for this bug.
    * m4/m4module.h (m4_symtab_apply): Add parameter.
    * m4/symtab.c (m4_symtab_apply): Ignore trace placeholders when
    requested.
    (m4_symtab_delete, symtab_dump): Adjust callers.
    * modules/m4.c (m4_dump_symbols): Likewise.
    
    Signed-off-by: Eric Blake <address@hidden>

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

Summary of changes:
 ChangeLog       |   12 ++++++++++++
 m4/m4module.h   |    8 ++++----
 m4/symtab.c     |   20 +++++++++++++-------
 modules/m4.c    |    4 +---
 src/freeze.c    |    6 +++---
 tests/freeze.at |    4 ++--
 6 files changed, 35 insertions(+), 19 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index e762099..195bde9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2007-10-18  Eric Blake  <address@hidden>
+
+       Fix 'm4 -F file -t undefined'.
+       * src/freeze.c (produce_symbol_dump): Skip trace placeholders.
+       * src/freeze.c (dump_symbol_CB): Also skip void symbols.
+       * tests/freeze.at (reloading unknown builtin): Test for this bug.
+       * m4/m4module.h (m4_symtab_apply): Add parameter.
+       * m4/symtab.c (m4_symtab_apply): Ignore trace placeholders when
+       requested.
+       (m4_symtab_delete, symtab_dump): Adjust callers.
+       * modules/m4.c (m4_dump_symbols): Likewise.
+
 2007-10-09  Eric Blake  <address@hidden>
 
        Fix regexp regression of 2007-09-29.
diff --git a/m4/m4module.h b/m4/m4module.h
index 91dcea1..b4693d7 100644
--- a/m4/m4module.h
+++ b/m4/m4module.h
@@ -196,13 +196,13 @@ extern void           m4__module_exit    (m4 *);
 /* --- SYMBOL TABLE MANAGEMENT --- */
 
 
-typedef void *m4_symtab_apply_func (m4_symbol_table *symtab, const char *key,
-                                   m4_symbol *symbol, void *userdata);
+typedef void *m4_symtab_apply_func (m4_symbol_table *, const char *,
+                                   m4_symbol *, void *);
 
 extern m4_symbol_table *m4_symtab_create  (size_t);
 extern void      m4_symtab_delete  (m4_symbol_table*);
-extern void *    m4_symtab_apply   (m4_symbol_table*, m4_symtab_apply_func*,
-                                    void*);
+extern void *    m4_symtab_apply   (m4_symbol_table*, bool,
+                                     m4_symtab_apply_func*, void*);
 
 extern m4_symbol *m4_symbol_lookup  (m4_symbol_table*, const char *);
 extern m4_symbol *m4_symbol_pushdef (m4_symbol_table*,
diff --git a/m4/symtab.c b/m4/symtab.c
index 31de98d..1228a29 100644
--- a/m4/symtab.c
+++ b/m4/symtab.c
@@ -82,13 +82,19 @@ m4_symtab_delete (m4_symbol_table *symtab)
   assert (symtab);
   assert (symtab->table);
 
-  m4_symtab_apply  (symtab, symbol_destroy_CB, NULL);
+  m4_symtab_apply (symtab, true, symbol_destroy_CB, NULL);
   m4_hash_delete (symtab->table);
   free (symtab);
 }
 
+/* For every symbol in SYMTAB, execute the callback FUNC with the name
+   and value of the symbol being visited, and the opaque parameter
+   USERDATA.  Skip undefined symbols that are placeholders for
+   traceon, unless INCLUDE_TRACE is true.  If FUNC returns non-NULL,
+   abort the iteration and return the same result; otherwise return
+   NULL when iteration completes.  */
 void *
-m4_symtab_apply (m4_symbol_table *symtab,
+m4_symtab_apply (m4_symbol_table *symtab, bool include_trace,
                 m4_symtab_apply_func *func, void *userdata)
 {
   m4_hash_iterator *place  = NULL;
@@ -100,10 +106,10 @@ m4_symtab_apply (m4_symbol_table *symtab,
 
   while ((place = m4_get_hash_iterator_next (symtab->table, place)))
     {
-      result = (*func) (symtab,
-                       (const char *) m4_get_hash_iterator_key   (place),
-                       (m4_symbol *)  m4_get_hash_iterator_value (place),
-                       userdata);
+      m4_symbol *symbol = m4_get_hash_iterator_value (place);
+      if (symbol->value || include_trace)
+       result = func (symtab, (const char *) m4_get_hash_iterator_key (place),
+                      symbol, userdata);
 
       if (result != NULL)
        {
@@ -700,7 +706,7 @@ static void *dump_symbol_CB (m4_symbol_table *symtab, const 
char *name,
 static M4_GNUC_UNUSED void *
 symtab_dump (m4_symbol_table *symtab)
 {
-  return m4_symtab_apply (symtab, dump_symbol_CB, NULL);
+  return m4_symtab_apply (symtab, true, dump_symbol_CB, NULL);
 }
 
 static void *
diff --git a/modules/m4.c b/modules/m4.c
index b39c5f2..c4a5c62 100644
--- a/modules/m4.c
+++ b/modules/m4.c
@@ -332,9 +332,7 @@ m4_dump_symbols (m4 *context, m4_dump_symbol_data *data, 
int argc,
   data->size = obstack_room (data->obs) / sizeof (const char *);
 
   if (argc == 1)
-    {
-      m4_symtab_apply (M4SYMTAB, dump_symbol_CB, data);
-    }
+    m4_symtab_apply (M4SYMTAB, false, dump_symbol_CB, data);
   else
     {
       int i;
diff --git a/src/freeze.c b/src/freeze.c
index d107244..9eca014 100644
--- a/src/freeze.c
+++ b/src/freeze.c
@@ -151,7 +151,7 @@ produce_module_dump (FILE *file, m4_module *module)
 static void
 produce_symbol_dump (m4 *context, FILE *file, m4_symbol_table *symtab)
 {
-  if (m4_symtab_apply (symtab, dump_symbol_CB, file))
+  if (m4_symtab_apply (symtab, false, dump_symbol_CB, file))
     assert (false);
 }
 
@@ -236,7 +236,7 @@ produce_frozen_state (m4 *context, const char *name)
       produce_mem_dump (file, M4SYNTAX->lquote.string,
                        M4SYNTAX->lquote.length);
       produce_mem_dump (file, M4SYNTAX->rquote.string,
-                        M4SYNTAX->rquote.length);
+                       M4SYNTAX->rquote.length);
       fputc ('\n', file);
     }
 
@@ -483,7 +483,7 @@ reload_frozen_state (m4 *context, const char *name)
       else
        m4__module_open (context, "gnu", NULL);
       /* Disable { and } categories, since ${11} was not supported in
-         1.4.x.  */
+        1.4.x.  */
       m4_set_syntax (M4SYNTAX, 'O', '+', "{}");
       break;
     default:
diff --git a/tests/freeze.at b/tests/freeze.at
index 924d9ff..530553a 100644
--- a/tests/freeze.at
+++ b/tests/freeze.at
@@ -322,8 +322,8 @@ AT_KEYWORDS([frozen])
 
 AT_DATA([[empty.m4]])
 
-# Freeze default state.
-AT_CHECK_M4([-F frozen.m4f empty.m4])
+# Freeze default state.  Also check for bug fixed 18 Oct, 2007.
+AT_CHECK_M4([-F frozen.m4f -t undefined empty.m4])
 
 # Add an unknown builtin.
 echo 'F1,1' >> frozen.m4f


hooks/post-receive
--
GNU M4 source repository




reply via email to

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