diff --git a/src/mzscheme/src/env.c b/src/mzscheme/src/env.c index 0055f88bed..e0036fce04 100644 --- a/src/mzscheme/src/env.c +++ b/src/mzscheme/src/env.c @@ -1196,8 +1196,9 @@ Scheme_Hash_Table *scheme_map_constants_to_globals(void) for (i = ht->size; i--; ) { Scheme_Bucket *b = bs[i]; - if (b && (((Scheme_Bucket_With_Flags *)b)->flags & GLOB_IS_CONST)) + if (b && (((Scheme_Bucket_With_Flags *)b)->flags & GLOB_IS_CONST)) { scheme_hash_set(result, b->val, (Scheme_Object *)b); + } } return result; diff --git a/src/mzscheme/src/hash.c b/src/mzscheme/src/hash.c index 0da3121319..066ff3ec26 100644 --- a/src/mzscheme/src/hash.c +++ b/src/mzscheme/src/hash.c @@ -51,8 +51,6 @@ long PTR_TO_LONG(Scheme_Object *o) v = o->keyex; if (!(v & 0xFFFC)) { - if (!keygen) - keygen += 4; v |= (short)keygen; #ifdef OBJHEAD_HAS_HASH_BITS /* In 3m mode, we only have 14 bits of hash code in the @@ -65,6 +63,7 @@ long PTR_TO_LONG(Scheme_Object *o) } else v &= ~0x4000; #endif + if (!v) v = 0x1AD0; o->keyex = v; keygen += 4; } @@ -76,7 +75,8 @@ long PTR_TO_LONG(Scheme_Object *o) #endif bits = o->type; - return (bits << 16) | ((v >> 2) & 0xFFFF); + /* Note: low two bits will be ignored */ + return (bits << 16) | (v & 0xFFFF); } #else # define PTR_TO_LONG(p) ((long)(p)) @@ -872,7 +872,7 @@ void scheme_init_hash_key_procs(void) long scheme_hash_key(Scheme_Object *o) { - return PTR_TO_LONG(o); + return PTR_TO_LONG(o) >> 2; } END_XFORM_SKIP; diff --git a/src/mzscheme/src/schpriv.h b/src/mzscheme/src/schpriv.h index fec1d5aee3..87af3b37bc 100644 --- a/src/mzscheme/src/schpriv.h +++ b/src/mzscheme/src/schpriv.h @@ -950,7 +950,7 @@ typedef struct { Otherwise, name is a boxed symbol (or #f) to indicate a method. */ #define scheme_make_prim_w_arity2(f, n, mina, maxa, minr, maxr) \ - scheme_make_prim_w_everything(f, 0, n, mina, maxa, 0, minr, maxr) + scheme_make_prim_w_everything(f, 1, n, mina, maxa, 0, minr, maxr) Scheme_Object *scheme_unclose_case_lambda(Scheme_Object *expr, int jit);