[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