mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
* Don't recompute symbol hash values. The symbol holds them already.
* Speed up interning of symbols by comparing hash values.
This commit is contained in:
parent
709a308dfc
commit
0f87853a56
2 changed files with 15 additions and 6 deletions
|
@ -1,3 +1,12 @@
|
|||
2000-11-01 Dirk Herrmann <D.Herrmann@tu-bs.de>
|
||||
|
||||
* symbols.c (scm_sym2vcell, scm_sym2ovcell_soft,
|
||||
scm_intern_symbol, scm_unintern_symbol): Symbol objects already
|
||||
hold their hash values, no need to recompute them.
|
||||
|
||||
(scm_intern_obarray_soft): Speed up search for a matching symbol
|
||||
by comparing the hash values first.
|
||||
|
||||
2000-10-30 Dirk Herrmann <D.Herrmann@tu-bs.de>
|
||||
|
||||
* unif.c (scm_make_uve, scm_dimensions_to_uniform_array): Don't
|
||||
|
|
|
@ -143,8 +143,7 @@ scm_sym2vcell (SCM sym, SCM thunk, SCM definep)
|
|||
SCM lsym;
|
||||
SCM * lsymp;
|
||||
SCM z;
|
||||
scm_sizet hash
|
||||
= scm_string_hash (SCM_SYMBOL_UCHARS (sym), SCM_SYMBOL_LENGTH (sym)) % scm_symhash_dim;
|
||||
scm_sizet hash = SCM_SYMBOL_HASH (sym) % scm_symhash_dim;
|
||||
|
||||
SCM_DEFER_INTS;
|
||||
for (lsym = SCM_VELTS (scm_symhash)[hash]; SCM_NIMP (lsym); lsym = SCM_CDR (lsym))
|
||||
|
@ -188,8 +187,7 @@ SCM
|
|||
scm_sym2ovcell_soft (SCM sym, SCM obarray)
|
||||
{
|
||||
SCM lsym, z;
|
||||
scm_sizet hash
|
||||
= scm_string_hash (SCM_SYMBOL_UCHARS (sym), SCM_SYMBOL_LENGTH (sym)) % SCM_VECTOR_LENGTH (obarray);
|
||||
scm_sizet hash = SCM_SYMBOL_HASH (sym) % SCM_VECTOR_LENGTH (obarray);
|
||||
SCM_REDEFER_INTS;
|
||||
for (lsym = SCM_VELTS (obarray)[hash];
|
||||
SCM_NIMP (lsym);
|
||||
|
@ -265,6 +263,8 @@ scm_intern_obarray_soft (const char *name,scm_sizet len,SCM obarray,unsigned int
|
|||
SCM a = SCM_CAR (lsym);
|
||||
SCM z = SCM_CAR (a);
|
||||
unsigned char *tmp = SCM_SYMBOL_UCHARS (z);
|
||||
if (SCM_SYMBOL_HASH (z) != raw_hash)
|
||||
goto trynext;
|
||||
if (SCM_SYMBOL_LENGTH (z) != len)
|
||||
goto trynext;
|
||||
for (i = len; i--;)
|
||||
|
@ -557,7 +557,7 @@ SCM_DEFINE (scm_intern_symbol, "intern-symbol", 2, 0, 0,
|
|||
if (SCM_FALSEP (o))
|
||||
o = scm_symhash;
|
||||
SCM_VALIDATE_VECTOR (1,o);
|
||||
hval = scm_string_hash (SCM_SYMBOL_UCHARS (s), SCM_SYMBOL_LENGTH (s)) % SCM_VECTOR_LENGTH (o);
|
||||
hval = SCM_SYMBOL_HASH (s) % SCM_VECTOR_LENGTH (o);
|
||||
/* If the symbol is already interned, simply return. */
|
||||
SCM_REDEFER_INTS;
|
||||
{
|
||||
|
@ -594,7 +594,7 @@ SCM_DEFINE (scm_unintern_symbol, "unintern-symbol", 2, 0, 0,
|
|||
if (SCM_FALSEP (o))
|
||||
o = scm_symhash;
|
||||
SCM_VALIDATE_VECTOR (1,o);
|
||||
hval = scm_string_hash (SCM_SYMBOL_UCHARS (s), SCM_SYMBOL_LENGTH (s)) % SCM_VECTOR_LENGTH (o);
|
||||
hval = SCM_SYMBOL_HASH (s) % SCM_VECTOR_LENGTH (o);
|
||||
SCM_DEFER_INTS;
|
||||
{
|
||||
SCM lsym_follow;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue