diff options
author | Gary Houston <ghouston@arglist.com> | 2001-07-11 22:00:52 +0000 |
---|---|---|
committer | Gary Houston <ghouston@arglist.com> | 2001-07-11 22:00:52 +0000 |
commit | be390de2baddbe5361bfc99da3f402b1e8d19225 (patch) | |
tree | 4a25c165b4a46f1e19b8e3c7538f8a0f0502fb97 /srfi/srfi-14.c | |
parent | dd84cd4d1fd4f216b9c473c37eeeef790867c925 (diff) | |
download | guile-be390de2baddbe5361bfc99da3f402b1e8d19225.tar.gz |
(s_scm_char_set_leq): similarly, (char-set<=) should return #t.
take a single "rest" argument.
Diffstat (limited to 'srfi/srfi-14.c')
-rw-r--r-- | srfi/srfi-14.c | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/srfi/srfi-14.c b/srfi/srfi-14.c index a0fc6615a..b18cb1251 100644 --- a/srfi/srfi-14.c +++ b/srfi/srfi-14.c @@ -123,14 +123,14 @@ SCM_DEFINE (scm_char_set_eq, "char-set=", 0, 0, 1, while (!SCM_NULLP (char_sets)) { - SCM csn = SCM_CAR (char_sets); - long *csn_data; + SCM csi = SCM_CAR (char_sets); + long *csi_data; - SCM_VALIDATE_SMOB (argnum++, csn, charset); - csn_data = (long *) SCM_SMOB_DATA (csn); + SCM_VALIDATE_SMOB (argnum++, csi, charset); + csi_data = (long *) SCM_SMOB_DATA (csi); if (cs1_data == NULL) - cs1_data = csn_data; - else if (memcmp (cs1_data, csn_data, SCM_CHARSET_SIZE) != 0) + cs1_data = csi_data; + else if (memcmp (cs1_data, csi_data, SCM_CHARSET_SIZE) != 0) return SCM_BOOL_F; char_sets = SCM_CDR (char_sets); } @@ -139,34 +139,36 @@ SCM_DEFINE (scm_char_set_eq, "char-set=", 0, 0, 1, #undef FUNC_NAME -SCM_DEFINE (scm_char_set_leq, "char-set<=", 1, 0, 1, - (SCM cs1, SCM csr), +SCM_DEFINE (scm_char_set_leq, "char-set<=", 0, 0, 1, + (SCM char_sets), "Return @code{#t} if every character set @var{cs}i is a subset\n" "of character set @var{cs}i+1.") #define FUNC_NAME s_scm_char_set_leq { - int argnum = 2; + int argnum = 1; + long *prev_data = NULL; - SCM_VALIDATE_SMOB (1, cs1, charset); - SCM_VALIDATE_REST_ARGUMENT (csr); + SCM_VALIDATE_REST_ARGUMENT (char_sets); - while (!SCM_NULLP (csr)) + while (!SCM_NULLP (char_sets)) { - long * p1, * p2; - SCM cs2 = SCM_CAR (csr); - int k; + SCM csi = SCM_CAR (char_sets); + long *csi_data; - SCM_VALIDATE_SMOB (argnum++, cs2, charset); - p1 = (long *) SCM_SMOB_DATA (cs1); - p2 = (long *) SCM_SMOB_DATA (cs2); - for (k = 0; k < SCM_CHARSET_SIZE / sizeof (long); k++) + SCM_VALIDATE_SMOB (argnum++, csi, charset); + csi_data = (long *) SCM_SMOB_DATA (csi); + if (prev_data) { - if ((p1[k] & p2[k]) != p1[k]) - return SCM_BOOL_F; + int k; + + for (k = 0; k < SCM_CHARSET_SIZE / sizeof (long); k++) + { + if ((prev_data[k] & csi_data[k]) != prev_data[k]) + return SCM_BOOL_F; + } } - - csr = SCM_CDR (csr); - cs1 = cs2; + prev_data = csi_data; + char_sets = SCM_CDR (char_sets); } return SCM_BOOL_T; } |