m4-patches
[Top][All Lists]
Advanced

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

[PATCH 2/1] symtab: drop redundant symbol flag


From: Eric Blake
Subject: [PATCH 2/1] symtab: drop redundant symbol flag
Date: Sat, 17 Apr 2021 13:40:11 -0500

In writing the previous patch, I noticed that the shadow flag is only
ever set when a pushdef stack is present, which makes it redundant now
that the pushdef stack is separate from the hash collision stack.

* src/m4.h (SYMBOL_SHADOWED): Delete.
* src/builtin.c (dump_symbol): Simplify, now that hack_all_symbols
no longer visits shadowed macros.
* src/symtab.c (lookup_symbol, symtab_print_list): Simplify.
---

And I noticed this followup.

 src/builtin.c |  6 +++---
 src/m4.h      |  2 --
 src/symtab.c  | 15 +++------------
 3 files changed, 6 insertions(+), 17 deletions(-)

diff --git a/src/builtin.c b/src/builtin.c
index d118b21c..494b3c5a 100644
--- a/src/builtin.c
+++ b/src/builtin.c
@@ -1,7 +1,7 @@
 /* GNU m4 -- A simple macro processor

-   Copyright (C) 1989-1994, 2000, 2004, 2006-2014, 2016-2017, 2020 Free
-   Software Foundation, Inc.
+   Copyright (C) 1989-1994, 2000, 2004, 2006-2014, 2016-2017, 2020-2021
+   Free Software Foundation, Inc.

    This file is part of GNU M4.

@@ -700,7 +700,7 @@ static void
 dump_symbol (symbol *sym, void *arg)
 {
   struct dump_symbol_data *data = (struct dump_symbol_data *) arg;
-  if (!SYMBOL_SHADOWED (sym) && SYMBOL_TYPE (sym) != TOKEN_VOID)
+  if (SYMBOL_TYPE (sym) != TOKEN_VOID)
     {
       obstack_blank (data->obs, sizeof (symbol *));
       data->base = (symbol **) obstack_base (data->obs);
diff --git a/src/m4.h b/src/m4.h
index ef5bf9a5..a156376e 100644
--- a/src/m4.h
+++ b/src/m4.h
@@ -362,7 +362,6 @@ struct symbol
   struct symbol *stack; /* pushdef stack */
   struct symbol *next; /* hash bucket chain */
   bool_bitfield traced : 1;
-  bool_bitfield shadowed : 1;
   bool_bitfield macro_args : 1;
   bool_bitfield blind_no_args : 1;
   bool_bitfield deleted : 1;
@@ -375,7 +374,6 @@ struct symbol
 #define SYMBOL_STACK(S)         ((S)->stack)
 #define SYMBOL_NEXT(S)          ((S)->next)
 #define SYMBOL_TRACED(S)        ((S)->traced)
-#define SYMBOL_SHADOWED(S)      ((S)->shadowed)
 #define SYMBOL_MACRO_ARGS(S)    ((S)->macro_args)
 #define SYMBOL_BLIND_NO_ARGS(S) ((S)->blind_no_args)
 #define SYMBOL_DELETED(S)       ((S)->deleted)
diff --git a/src/symtab.c b/src/symtab.c
index ac88a4cc..4266d54f 100644
--- a/src/symtab.c
+++ b/src/symtab.c
@@ -217,7 +217,6 @@ lookup_symbol (const char *name, symbol_lookup mode)
               SYMBOL_TYPE (sym) = TOKEN_VOID;
               SYMBOL_TRACED (sym) = SYMBOL_TRACED (old);
               SYMBOL_NAME (sym) = xstrdup (name);
-              SYMBOL_SHADOWED (sym) = false;
               SYMBOL_MACRO_ARGS (sym) = false;
               SYMBOL_BLIND_NO_ARGS (sym) = false;
               SYMBOL_DELETED (sym) = false;
@@ -236,14 +235,12 @@ lookup_symbol (const char *name, symbol_lookup mode)
     case SYMBOL_PUSHDEF:

       /* Insert a name in the symbol table.  If there is already a symbol
-         with the name, insert this in front of it, and mark the old
-         symbol as "shadowed".  */
+         with the name, insert this in front of it.  */

       sym = (symbol *) xmalloc (sizeof (symbol));
       SYMBOL_TYPE (sym) = TOKEN_VOID;
       SYMBOL_TRACED (sym) = false;
       SYMBOL_NAME (sym) = xstrdup (name);
-      SYMBOL_SHADOWED (sym) = false;
       SYMBOL_MACRO_ARGS (sym) = false;
       SYMBOL_BLIND_NO_ARGS (sym) = false;
       SYMBOL_DELETED (sym) = false;
@@ -258,7 +255,6 @@ lookup_symbol (const char *name, symbol_lookup mode)
           SYMBOL_STACK (sym) = SYMBOL_NEXT (sym);
           SYMBOL_NEXT (sym) = SYMBOL_NEXT (SYMBOL_STACK (sym));
           SYMBOL_NEXT (SYMBOL_STACK (sym)) = NULL;
-          SYMBOL_SHADOWED (SYMBOL_STACK (sym)) = true;
           SYMBOL_TRACED (sym) = SYMBOL_TRACED (SYMBOL_STACK (sym));
         }
       return sym;
@@ -279,10 +275,8 @@ lookup_symbol (const char *name, symbol_lookup mode)
         bool traced = false;
         symbol *next = SYMBOL_NEXT (sym);
         if (SYMBOL_STACK (sym) != NULL
-            && SYMBOL_SHADOWED (SYMBOL_STACK (sym))
             && mode == SYMBOL_POPDEF)
           {
-            SYMBOL_SHADOWED (SYMBOL_STACK (sym)) = false;
             SYMBOL_TRACED (SYMBOL_STACK (sym)) = SYMBOL_TRACED (sym);
             SYMBOL_NEXT (SYMBOL_STACK (sym)) = next;
             *spp = SYMBOL_STACK (sym);
@@ -298,15 +292,13 @@ lookup_symbol (const char *name, symbol_lookup mode)
             free_symbol (sym);
             sym = next;
           }
-        while (next != NULL && SYMBOL_SHADOWED (next)
-               && mode == SYMBOL_DELETE);
+        while (next != NULL && mode == SYMBOL_DELETE);
         if (traced)
           {
             sym = (symbol *) xmalloc (sizeof (symbol));
             SYMBOL_TYPE (sym) = TOKEN_VOID;
             SYMBOL_TRACED (sym) = true;
             SYMBOL_NAME (sym) = xstrdup (name);
-            SYMBOL_SHADOWED (sym) = false;
             SYMBOL_MACRO_ARGS (sym) = false;
             SYMBOL_BLIND_NO_ARGS (sym) = false;
             SYMBOL_DELETED (sym) = false;
@@ -404,12 +396,11 @@ symtab_print_list (int i)
     for (bucket = symtab[h]; bucket != NULL; bucket = bucket->next)
       for (sym = bucket; sym; sym = sym->stack)
         xprintf ("\tname %s, bucket %lu, addr %p, stack %p, next %p, "
-                 "flags%s%s%s, pending %d\n",
+                 "flags%s%s, pending %d\n",
                  SYMBOL_NAME (sym),
                  (unsigned long int) h, sym, SYMBOL_STACK (sym),
                  SYMBOL_NEXT (sym),
                  SYMBOL_TRACED (sym) ? " traced" : "",
-                 SYMBOL_SHADOWED (sym) ? " shadowed" : "",
                  SYMBOL_DELETED (sym) ? " deleted" : "",
                  SYMBOL_PENDING_EXPANSIONS (sym));
 }
-- 
2.31.1




reply via email to

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