Module Name: src
Committed By: rillig
Date: Sun Aug 1 07:46:51 UTC 2021
Modified Files:
src/usr.bin/xlint/lint1: lex.c
Log Message:
lint: merge duplicate code for removing a symbol from the table
No functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.60 -r1.61 src/usr.bin/xlint/lint1/lex.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.bin/xlint/lint1/lex.c
diff -u src/usr.bin/xlint/lint1/lex.c:1.60 src/usr.bin/xlint/lint1/lex.c:1.61
--- src/usr.bin/xlint/lint1/lex.c:1.60 Sun Aug 1 06:58:58 2021
+++ src/usr.bin/xlint/lint1/lex.c Sun Aug 1 07:46:51 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: lex.c,v 1.60 2021/08/01 06:58:58 rillig Exp $ */
+/* $NetBSD: lex.c,v 1.61 2021/08/01 07:46:51 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: lex.c,v 1.60 2021/08/01 06:58:58 rillig Exp $");
+__RCSID("$NetBSD: lex.c,v 1.61 2021/08/01 07:46:51 rillig Exp $");
#endif
#include <ctype.h>
@@ -278,6 +278,16 @@ symtab_add(sym_t *sym)
}
static void
+symtab_remove(sym_t *sym)
+{
+
+ if ((*sym->s_rlink = sym->s_link) != NULL)
+ sym->s_link->s_rlink = sym->s_rlink;
+ sym->s_link = NULL;
+}
+
+
+static void
add_keyword(const struct kwtab *kw, u_int deco)
{
sym_t *sym;
@@ -1504,21 +1514,17 @@ mktempsym(type_t *t)
return sym;
}
-/*
- * Remove a symbol forever from the symbol table. s_block_level
- * is set to -1 to avoid that the symbol will later be put
- * back to the symbol table.
- */
+/* Remove a symbol forever from the symbol table. */
void
rmsym(sym_t *sym)
{
debug_step("rmsym '%s' %d '%s'",
sym->s_name, (int)sym->s_kind, type_name(sym->s_type));
- if ((*sym->s_rlink = sym->s_link) != NULL)
- sym->s_link->s_rlink = sym->s_rlink;
+ symtab_remove(sym);
+
+ /* avoid that the symbol will later be put back to the symbol table */
sym->s_block_level = -1;
- sym->s_link = NULL;
}
/*
@@ -1535,9 +1541,7 @@ rmsyms(sym_t *syms)
debug_step("rmsyms '%s' %d '%s'",
sym->s_name, (int)sym->s_kind,
type_name(sym->s_type));
- if ((*sym->s_rlink = sym->s_link) != NULL)
- sym->s_link->s_rlink = sym->s_rlink;
- sym->s_link = NULL;
+ symtab_remove(sym);
sym->s_rlink = NULL;
}
}
@@ -1574,10 +1578,8 @@ cleanup(void)
for (i = 0; i < HSHSIZ1; i++) {
for (sym = symtab[i]; sym != NULL; sym = nsym) {
nsym = sym->s_link;
- if (sym->s_block_level >= 1) {
- if ((*sym->s_rlink = nsym) != NULL)
- nsym->s_rlink = sym->s_rlink;
- }
+ if (sym->s_block_level >= 1)
+ symtab_remove(sym);
}
}