From dba97178b17edf3aab2459eaf57b62fc193fdeb9 Mon Sep 17 00:00:00 2001 From: Dirk Herrmann Date: Mon, 10 Apr 2000 14:29:26 +0000 Subject: [PATCH] scm_hasher: Use symbolic names for the tc3 constants and some SCM usage cleanups. --- libguile/ChangeLog | 6 ++++++ libguile/hash.c | 26 +++++++++++++++----------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/libguile/ChangeLog b/libguile/ChangeLog index 8406a3b53..eff874cb7 100644 --- a/libguile/ChangeLog +++ b/libguile/ChangeLog @@ -1,3 +1,9 @@ +2000-04-10 Dirk Herrmann + + * hash.c (scm_hasher): Use symbolic names for the tc3 constants. + Unpack SCM value to use it as a switch parameter. Don't cast SCM + values to int values. + 2000-04-10 Mikael Djurfeldt * coop.c (mother): Handled EINTR (the wait has been interrupted by diff --git a/libguile/hash.c b/libguile/hash.c index 4113bcd2a..b65f98a1f 100644 --- a/libguile/hash.c +++ b/libguile/hash.c @@ -59,29 +59,33 @@ extern double floor(); #endif +/* Dirk:FIXME:: why downcase for characters? (2x: scm_hasher, scm_ihashv) */ +/* Dirk:FIXME:: scm_hasher could be made static. */ + + unsigned long scm_hasher(SCM obj, unsigned long n, scm_sizet d) { - switch (7 & (int) obj) { - case 2: - case 6: + switch (SCM_ITAG3 (obj)) { + case scm_tc3_int_1: + case scm_tc3_int_2: return SCM_INUM(obj) % n; /* SCM_INUMP(obj) */ - case 4: - if SCM_CHARP(obj) + case scm_tc3_imm24: + if (SCM_CHARP(obj)) return (unsigned)(scm_downcase(SCM_CHAR(obj))) % n; - switch ((int) obj) { + switch (SCM_UNPACK (obj)) { #ifndef SICP - case (int) SCM_EOL: + case SCM_EOL: d = 256; break; #endif - case (int) SCM_BOOL_T: + case SCM_BOOL_T: d = 257; break; - case (int) SCM_BOOL_F: + case SCM_BOOL_F: d = 258; break; - case (int) SCM_EOF_VAL: + case SCM_EOF_VAL: d = 259; break; default: @@ -90,7 +94,7 @@ scm_hasher(SCM obj, unsigned long n, scm_sizet d) return d % n; default: return 263 % n; /* perhaps should be error */ - case 0: + case scm_tc3_cons: switch SCM_TYP7(obj) { default: return 263 % n;