[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 3/3] symtab: use less memory in pushdef stacks
From: |
Eric Blake |
Subject: |
[PATCH 3/3] symtab: use less memory in pushdef stacks |
Date: |
Sat, 17 Apr 2021 14:58:29 -0500 |
No need to xstrdup identical names when we can share the same name
across the pushdef stack.
* src/symtab.c (free_symbol): Don't free shared name.
(lookup_symbol): Share name across pushdef stack.
---
src/symtab.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/src/symtab.c b/src/symtab.c
index 16ee3f97..842f231f 100644
--- a/src/symtab.c
+++ b/src/symtab.c
@@ -144,7 +144,8 @@ free_symbol (symbol *sym)
SYMBOL_DELETED (sym) = true;
else
{
- free (SYMBOL_NAME (sym));
+ if (SYMBOL_STACK (sym) == NULL)
+ free (SYMBOL_NAME (sym));
if (SYMBOL_TYPE (sym) == TOKEN_TEXT)
free (SYMBOL_TEXT (sym));
free (sym);
@@ -219,7 +220,8 @@ lookup_symbol (const char *name, symbol_lookup mode)
SYMBOL_TYPE (sym) = TOKEN_VOID;
SYMBOL_TRACED (sym) = SYMBOL_TRACED (old);
sym->hash = h;
- SYMBOL_NAME (sym) = xstrdup (name);
+ SYMBOL_NAME (sym) = old->name;
+ old->name = xstrdup (name);
SYMBOL_MACRO_ARGS (sym) = false;
SYMBOL_BLIND_NO_ARGS (sym) = false;
SYMBOL_DELETED (sym) = false;
@@ -244,7 +246,6 @@ lookup_symbol (const char *name, symbol_lookup mode)
SYMBOL_TYPE (sym) = TOKEN_VOID;
SYMBOL_TRACED (sym) = false;
sym->hash = h;
- SYMBOL_NAME (sym) = xstrdup (name);
SYMBOL_MACRO_ARGS (sym) = false;
SYMBOL_BLIND_NO_ARGS (sym) = false;
SYMBOL_DELETED (sym) = false;
@@ -260,7 +261,10 @@ lookup_symbol (const char *name, symbol_lookup mode)
sym->next = SYMBOL_STACK (sym)->next;
SYMBOL_STACK (sym)->next = NULL;
SYMBOL_TRACED (sym) = SYMBOL_TRACED (SYMBOL_STACK (sym));
+ SYMBOL_NAME (sym) = SYMBOL_NAME (SYMBOL_STACK (sym));
}
+ else
+ SYMBOL_NAME (sym) = xstrdup (name);
return sym;
case SYMBOL_DELETE:
--
2.31.1