Module Name: src
Committed By: rillig
Date: Sun Aug 1 08:03:43 UTC 2021
Modified Files:
src/usr.bin/xlint/lint1: lex.c lint1.h
Log Message:
lint: remove hash value from symbol buffer
Conceptually, a symbol buffer does not need to remember its hash value
since that belongs to the symbol table. This makes the code for the
symbol table simpler. The number of hash calculations increases by
about 5%, which is negligible.
No functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.61 -r1.62 src/usr.bin/xlint/lint1/lex.c
cvs rdiff -u -r1.120 -r1.121 src/usr.bin/xlint/lint1/lint1.h
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.61 src/usr.bin/xlint/lint1/lex.c:1.62
--- src/usr.bin/xlint/lint1/lex.c:1.61 Sun Aug 1 07:46:51 2021
+++ src/usr.bin/xlint/lint1/lex.c Sun Aug 1 08:03:43 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: lex.c,v 1.61 2021/08/01 07:46:51 rillig Exp $ */
+/* $NetBSD: lex.c,v 1.62 2021/08/01 08:03:43 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.61 2021/08/01 07:46:51 rillig Exp $");
+__RCSID("$NetBSD: lex.c,v 1.62 2021/08/01 08:03:43 rillig Exp $");
#endif
#include <ctype.h>
@@ -259,9 +259,11 @@ symt_t symtyp;
static void
-symtab_add_hash(sym_t *sym, size_t h)
+symtab_add(sym_t *sym)
{
+ size_t h;
+ h = hash(sym->s_name);
if ((sym->s_link = symtab[h]) != NULL)
symtab[h]->s_rlink = &sym->s_link;
sym->s_rlink = &symtab[h];
@@ -269,15 +271,6 @@ symtab_add_hash(sym_t *sym, size_t h)
}
static void
-symtab_add(sym_t *sym)
-{
- size_t h;
-
- h = hash(sym->s_name);
- symtab_add_hash(sym, h);
-}
-
-static void
symtab_remove(sym_t *sym)
{
@@ -445,7 +438,6 @@ lex_name(const char *yytext, size_t yyle
sb = allocsb();
sb->sb_name = yytext;
sb->sb_len = yyleng;
- sb->sb_hash = hash(yytext);
if ((sym = search(sb)) != NULL && sym->s_keyword != NULL) {
freesb(sb);
return keyw(sym);
@@ -473,10 +465,12 @@ lex_name(const char *yytext, size_t yyle
static sym_t *
search(sbuf_t *sb)
{
+ int h;
sym_t *sym;
const struct kwtab *kw;
- for (sym = symtab[sb->sb_hash]; sym != NULL; sym = sym->s_link) {
+ h = hash(sb->sb_name);
+ for (sym = symtab[h]; sym != NULL; sym = sym->s_link) {
if (strcmp(sym->s_name, sb->sb_name) != 0)
continue;
kw = sym->s_keyword;
@@ -1471,7 +1465,7 @@ getsym(sbuf_t *sb)
symtyp = FVFT;
- symtab_add_hash(sym, sb->sb_hash);
+ symtab_add(sym);
*di->d_ldlsym = sym;
di->d_ldlsym = &sym->s_dlnxt;
Index: src/usr.bin/xlint/lint1/lint1.h
diff -u src/usr.bin/xlint/lint1/lint1.h:1.120 src/usr.bin/xlint/lint1/lint1.h:1.121
--- src/usr.bin/xlint/lint1/lint1.h:1.120 Sat Jul 31 19:52:44 2021
+++ src/usr.bin/xlint/lint1/lint1.h Sun Aug 1 08:03:43 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: lint1.h,v 1.120 2021/07/31 19:52:44 rillig Exp $ */
+/* $NetBSD: lint1.h,v 1.121 2021/08/01 08:03:43 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -293,7 +293,6 @@ typedef struct sym {
typedef struct sbuf {
const char *sb_name; /* name of symbol */
size_t sb_len; /* length (without '\0') */
- int sb_hash; /* hash value */
sym_t *sb_sym; /* symbol table entry */
struct sbuf *sb_next; /* for freelist */
} sbuf_t;