mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-11 14:21:10 +02:00
* Guile does not assume a hash table size of scm_symhash_dim any more.
This commit is contained in:
parent
23670993da
commit
93d40df216
6 changed files with 45 additions and 30 deletions
2
NEWS
2
NEWS
|
@ -322,6 +322,8 @@ Use SCM_CDR instead of SCM_GCCDR.
|
||||||
|
|
||||||
** Removed function: scm_struct_init
|
** Removed function: scm_struct_init
|
||||||
|
|
||||||
|
** Removed variable: scm_symhash_dim
|
||||||
|
|
||||||
** Renamed function: scm_make_cont has been replaced by
|
** Renamed function: scm_make_cont has been replaced by
|
||||||
scm_make_continuation, which has a different interface.
|
scm_make_continuation, which has a different interface.
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,23 @@
|
||||||
|
2000-12-08 Dirk Herrmann <D.Herrmann@tu-bs.de>
|
||||||
|
|
||||||
|
* environments.c (DEFAULT_OBARRAY_SIZE), gc.c
|
||||||
|
(DEFAULT_SYMHASH_SIZE): Added to locally determine arbitrary
|
||||||
|
default values for obarrays, thus removing the dependency from
|
||||||
|
scm_symhash_dim.
|
||||||
|
|
||||||
|
* environments.c (scm_make_leaf_environment,
|
||||||
|
scm_make_eval_environment), gc.c (scm_init_storage): Don't use
|
||||||
|
scm_symhash_dim.
|
||||||
|
|
||||||
|
* symbols.c (NUM_HASH_BUCKETS), symbols.[ch] (scm_symhash_dim):
|
||||||
|
Removed.
|
||||||
|
|
||||||
|
* symbols.c (scm_sym2vcell, scm_sysintern0_no_module_lookup):
|
||||||
|
Eliminate a redundant SCM_IMP test.
|
||||||
|
|
||||||
|
(scm_sym2vcell, scm_sysintern0_no_module_lookup):
|
||||||
|
Don't assume a fixed obarray size any more.
|
||||||
|
|
||||||
2000-12-07 Dirk Herrmann <D.Herrmann@tu-bs.de>
|
2000-12-07 Dirk Herrmann <D.Herrmann@tu-bs.de>
|
||||||
|
|
||||||
* gc.c (scm_init_gc): gc_async is already protected from gc,
|
* gc.c (scm_init_gc): gc_async is already protected from gc,
|
||||||
|
|
|
@ -58,6 +58,7 @@
|
||||||
|
|
||||||
long scm_tc16_environment;
|
long scm_tc16_environment;
|
||||||
long scm_tc16_observer;
|
long scm_tc16_observer;
|
||||||
|
#define DEFAULT_OBARRAY_SIZE 137
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1036,7 +1037,7 @@ SCM_DEFINE (scm_make_leaf_environment, "make-leaf-environment", 0, 0, 0,
|
||||||
env = scm_make_environment (body);
|
env = scm_make_environment (body);
|
||||||
|
|
||||||
core_environments_init (&body->base, &leaf_environment_funcs);
|
core_environments_init (&body->base, &leaf_environment_funcs);
|
||||||
body->obarray = scm_make_vector (SCM_MAKINUM (scm_symhash_dim), SCM_EOL);
|
body->obarray = scm_make_vector (SCM_MAKINUM (DEFAULT_OBARRAY_SIZE), SCM_EOL);
|
||||||
|
|
||||||
return env;
|
return env;
|
||||||
}
|
}
|
||||||
|
@ -1428,7 +1429,7 @@ SCM_DEFINE (scm_make_eval_environment, "make-eval-environment", 2, 0, 0,
|
||||||
env = scm_make_environment (body);
|
env = scm_make_environment (body);
|
||||||
|
|
||||||
core_environments_init (&body->base, &eval_environment_funcs);
|
core_environments_init (&body->base, &eval_environment_funcs);
|
||||||
body->obarray = scm_make_vector (SCM_MAKINUM (scm_symhash_dim), SCM_EOL);
|
body->obarray = scm_make_vector (SCM_MAKINUM (DEFAULT_OBARRAY_SIZE), SCM_EOL);
|
||||||
body->imported = imported;
|
body->imported = imported;
|
||||||
body->imported_observer
|
body->imported_observer
|
||||||
= SCM_ENVIRONMENT_OBSERVE (imported, eval_environment_observer, env, 1);
|
= SCM_ENVIRONMENT_OBSERVE (imported, eval_environment_observer, env, 1);
|
||||||
|
|
|
@ -2506,9 +2506,12 @@ scm_init_storage (scm_sizet init_heap_size_1, int gc_trigger_1,
|
||||||
scm_listofnull = scm_cons (SCM_EOL, SCM_EOL);
|
scm_listofnull = scm_cons (SCM_EOL, SCM_EOL);
|
||||||
scm_nullstr = scm_makstr (0L, 0);
|
scm_nullstr = scm_makstr (0L, 0);
|
||||||
scm_nullvect = scm_make_vector (SCM_INUM0, SCM_UNDEFINED);
|
scm_nullvect = scm_make_vector (SCM_INUM0, SCM_UNDEFINED);
|
||||||
scm_symhash = scm_make_vector (SCM_MAKINUM (scm_symhash_dim), SCM_EOL);
|
|
||||||
scm_weak_symhash = scm_make_weak_key_hash_table (SCM_MAKINUM (scm_symhash_dim));
|
#define DEFAULT_SYMHASH_SIZE 277
|
||||||
scm_symhash_vars = scm_make_vector (SCM_MAKINUM (scm_symhash_dim), SCM_EOL);
|
scm_symhash = scm_make_vector (SCM_MAKINUM (DEFAULT_SYMHASH_SIZE), SCM_EOL);
|
||||||
|
scm_weak_symhash = scm_make_weak_key_hash_table (SCM_MAKINUM (DEFAULT_SYMHASH_SIZE));
|
||||||
|
scm_symhash_vars = scm_make_vector (SCM_MAKINUM (DEFAULT_SYMHASH_SIZE), SCM_EOL);
|
||||||
|
|
||||||
scm_stand_in_procs = SCM_EOL;
|
scm_stand_in_procs = SCM_EOL;
|
||||||
scm_permobjs = SCM_EOL;
|
scm_permobjs = SCM_EOL;
|
||||||
scm_protects = scm_make_vector (SCM_MAKINUM (31), SCM_EOL);
|
scm_protects = scm_make_vector (SCM_MAKINUM (31), SCM_EOL);
|
||||||
|
|
|
@ -66,12 +66,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* NUM_HASH_BUCKETS is the number of symbol scm_hash table buckets.
|
|
||||||
*/
|
|
||||||
#define NUM_HASH_BUCKETS 137
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
duplicate_string (const char * src, unsigned long length)
|
duplicate_string (const char * src, unsigned long length)
|
||||||
{
|
{
|
||||||
|
@ -109,9 +103,6 @@ scm_string_hash (const unsigned char *str, scm_sizet len)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int scm_symhash_dim = NUM_HASH_BUCKETS;
|
|
||||||
|
|
||||||
|
|
||||||
/* scm_sym2vcell
|
/* scm_sym2vcell
|
||||||
* looks up the symbol in the symhash table.
|
* looks up the symbol in the symhash table.
|
||||||
*/
|
*/
|
||||||
|
@ -131,24 +122,23 @@ scm_sym2vcell (SCM sym, SCM thunk, SCM definep)
|
||||||
|
|
||||||
if (SCM_FALSEP (var))
|
if (SCM_FALSEP (var))
|
||||||
return SCM_BOOL_F;
|
return SCM_BOOL_F;
|
||||||
|
else if (SCM_VARIABLEP (var))
|
||||||
|
return SCM_VARVCELL (var);
|
||||||
else
|
else
|
||||||
{
|
scm_wta (sym, "strangely interned symbol? ", "");
|
||||||
if (SCM_IMP(var) || !SCM_VARIABLEP (var))
|
|
||||||
scm_wta (sym, "strangely interned symbol? ", "");
|
|
||||||
return SCM_VARVCELL (var);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SCM lsym;
|
SCM lsym;
|
||||||
SCM * lsymp;
|
SCM * lsymp;
|
||||||
SCM z;
|
scm_sizet hash1;
|
||||||
scm_sizet hash = SCM_SYMBOL_HASH (sym) % scm_symhash_dim;
|
scm_sizet hash2;
|
||||||
|
|
||||||
SCM_DEFER_INTS;
|
SCM_DEFER_INTS;
|
||||||
for (lsym = SCM_VELTS (scm_symhash)[hash]; SCM_NIMP (lsym); lsym = SCM_CDR (lsym))
|
hash1 = SCM_SYMBOL_HASH (sym) % SCM_VECTOR_LENGTH (scm_symhash);
|
||||||
|
for (lsym = SCM_VELTS (scm_symhash)[hash1]; SCM_NIMP (lsym); lsym = SCM_CDR (lsym))
|
||||||
{
|
{
|
||||||
z = SCM_CAR (lsym);
|
SCM z = SCM_CAR (lsym);
|
||||||
if (SCM_EQ_P (SCM_CAR (z), sym))
|
if (SCM_EQ_P (SCM_CAR (z), sym))
|
||||||
{
|
{
|
||||||
SCM_ALLOW_INTS;
|
SCM_ALLOW_INTS;
|
||||||
|
@ -156,19 +146,20 @@ scm_sym2vcell (SCM sym, SCM thunk, SCM definep)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (lsym = *(lsymp = &SCM_VELTS (scm_weak_symhash)[hash]);
|
hash2 = SCM_SYMBOL_HASH (sym) % SCM_VECTOR_LENGTH (scm_weak_symhash);
|
||||||
|
for (lsym = *(lsymp = &SCM_VELTS (scm_weak_symhash)[hash2]);
|
||||||
SCM_NIMP (lsym);
|
SCM_NIMP (lsym);
|
||||||
lsym = *(lsymp = SCM_CDRLOC (lsym)))
|
lsym = *(lsymp = SCM_CDRLOC (lsym)))
|
||||||
{
|
{
|
||||||
z = SCM_CAR (lsym);
|
SCM z = SCM_CAR (lsym);
|
||||||
if (SCM_EQ_P (SCM_CAR (z), sym))
|
if (SCM_EQ_P (SCM_CAR (z), sym))
|
||||||
{
|
{
|
||||||
if (SCM_NFALSEP (definep))
|
if (SCM_NFALSEP (definep))
|
||||||
{
|
{
|
||||||
/* Move handle from scm_weak_symhash to scm_symhash. */
|
/* Move handle from scm_weak_symhash to scm_symhash. */
|
||||||
*lsymp = SCM_CDR (lsym);
|
*lsymp = SCM_CDR (lsym);
|
||||||
SCM_SETCDR (lsym, SCM_VELTS(scm_symhash)[hash]);
|
SCM_SETCDR (lsym, SCM_VELTS(scm_symhash)[hash1]);
|
||||||
SCM_VELTS(scm_symhash)[hash] = lsym;
|
SCM_VELTS(scm_symhash)[hash1] = lsym;
|
||||||
}
|
}
|
||||||
SCM_ALLOW_INTS;
|
SCM_ALLOW_INTS;
|
||||||
return z;
|
return z;
|
||||||
|
@ -363,7 +354,7 @@ scm_sysintern0_no_module_lookup (const char *name)
|
||||||
SCM lsym;
|
SCM lsym;
|
||||||
scm_sizet len = strlen (name);
|
scm_sizet len = strlen (name);
|
||||||
scm_sizet raw_hash = scm_string_hash ((unsigned char *) name, len);
|
scm_sizet raw_hash = scm_string_hash ((unsigned char *) name, len);
|
||||||
scm_sizet hash = raw_hash % scm_symhash_dim;
|
scm_sizet hash = raw_hash % SCM_VECTOR_LENGTH (scm_symhash);
|
||||||
|
|
||||||
SCM_NEWCELL2 (lsym);
|
SCM_NEWCELL2 (lsym);
|
||||||
SCM_SET_SYMBOL_CHARS (lsym, name);
|
SCM_SET_SYMBOL_CHARS (lsym, name);
|
||||||
|
|
|
@ -50,8 +50,6 @@
|
||||||
#include "libguile/__scm.h"
|
#include "libguile/__scm.h"
|
||||||
|
|
||||||
|
|
||||||
extern int scm_symhash_dim;
|
|
||||||
|
|
||||||
/* SCM_SYMBOL_LENGTH(SYM) is the length of SYM's name in characters, and
|
/* SCM_SYMBOL_LENGTH(SYM) is the length of SYM's name in characters, and
|
||||||
* SCM_SYMBOL_CHARS(SYM) is the address of the first character of SYM's name.
|
* SCM_SYMBOL_CHARS(SYM) is the address of the first character of SYM's name.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue