diff options
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | libguile/ChangeLog | 20 | ||||
-rw-r--r-- | libguile/environments.c | 5 | ||||
-rw-r--r-- | libguile/gc.c | 9 | ||||
-rw-r--r-- | libguile/symbols.c | 37 | ||||
-rw-r--r-- | libguile/symbols.h | 2 |
6 files changed, 45 insertions, 30 deletions
@@ -322,6 +322,8 @@ Use SCM_CDR instead of SCM_GCCDR. ** Removed function: scm_struct_init +** Removed variable: scm_symhash_dim + ** Renamed function: scm_make_cont has been replaced by scm_make_continuation, which has a different interface. diff --git a/libguile/ChangeLog b/libguile/ChangeLog index 52a2ffce2..809d565c5 100644 --- a/libguile/ChangeLog +++ b/libguile/ChangeLog @@ -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> * gc.c (scm_init_gc): gc_async is already protected from gc, diff --git a/libguile/environments.c b/libguile/environments.c index d577e50ad..8f6910648 100644 --- a/libguile/environments.c +++ b/libguile/environments.c @@ -58,6 +58,7 @@ long scm_tc16_environment; 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); 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; } @@ -1428,7 +1429,7 @@ SCM_DEFINE (scm_make_eval_environment, "make-eval-environment", 2, 0, 0, env = scm_make_environment (body); 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_observer = SCM_ENVIRONMENT_OBSERVE (imported, eval_environment_observer, env, 1); diff --git a/libguile/gc.c b/libguile/gc.c index b50281cda..e04d50b18 100644 --- a/libguile/gc.c +++ b/libguile/gc.c @@ -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_nullstr = scm_makstr (0L, 0); 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)); - scm_symhash_vars = scm_make_vector (SCM_MAKINUM (scm_symhash_dim), SCM_EOL); + +#define DEFAULT_SYMHASH_SIZE 277 + 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_permobjs = SCM_EOL; scm_protects = scm_make_vector (SCM_MAKINUM (31), SCM_EOL); diff --git a/libguile/symbols.c b/libguile/symbols.c index e4add2728..aef98d09f 100644 --- a/libguile/symbols.c +++ b/libguile/symbols.c @@ -66,12 +66,6 @@ -/* NUM_HASH_BUCKETS is the number of symbol scm_hash table buckets. - */ -#define NUM_HASH_BUCKETS 137 - - - static char * 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 * looks up the symbol in the symhash table. */ @@ -131,24 +122,23 @@ scm_sym2vcell (SCM sym, SCM thunk, SCM definep) if (SCM_FALSEP (var)) return SCM_BOOL_F; + else if (SCM_VARIABLEP (var)) + return SCM_VARVCELL (var); else - { - if (SCM_IMP(var) || !SCM_VARIABLEP (var)) - scm_wta (sym, "strangely interned symbol? ", ""); - return SCM_VARVCELL (var); - } + scm_wta (sym, "strangely interned symbol? ", ""); } else { SCM lsym; SCM * lsymp; - SCM z; - scm_sizet hash = SCM_SYMBOL_HASH (sym) % scm_symhash_dim; + scm_sizet hash1; + scm_sizet hash2; 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)) { 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); lsym = *(lsymp = SCM_CDRLOC (lsym))) { - z = SCM_CAR (lsym); + SCM z = SCM_CAR (lsym); if (SCM_EQ_P (SCM_CAR (z), sym)) { if (SCM_NFALSEP (definep)) { /* Move handle from scm_weak_symhash to scm_symhash. */ *lsymp = SCM_CDR (lsym); - SCM_SETCDR (lsym, SCM_VELTS(scm_symhash)[hash]); - SCM_VELTS(scm_symhash)[hash] = lsym; + SCM_SETCDR (lsym, SCM_VELTS(scm_symhash)[hash1]); + SCM_VELTS(scm_symhash)[hash1] = lsym; } SCM_ALLOW_INTS; return z; @@ -363,7 +354,7 @@ scm_sysintern0_no_module_lookup (const char *name) SCM lsym; scm_sizet len = strlen (name); 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_SET_SYMBOL_CHARS (lsym, name); diff --git a/libguile/symbols.h b/libguile/symbols.h index 2ce698652..7db965dc6 100644 --- a/libguile/symbols.h +++ b/libguile/symbols.h @@ -50,8 +50,6 @@ #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_CHARS(SYM) is the address of the first character of SYM's name. */ |