diff options
-rw-r--r-- | libguile/ChangeLog | 5 | ||||
-rw-r--r-- | libguile/unif.c | 14 |
2 files changed, 14 insertions, 5 deletions
diff --git a/libguile/ChangeLog b/libguile/ChangeLog index a00a3bd07..d958496f6 100644 --- a/libguile/ChangeLog +++ b/libguile/ChangeLog @@ -1,3 +1,8 @@ +2001-10-28 Mikael Djurfeldt <mdj@linnaeus> + + * unif.c (scm_uniform_array_read_x, scm_uniform_array_write): + Don't apply scm_uniform_vector_length on arrays. + 2001-10-14 Dirk Herrmann <D.Herrmann@tu-bs.de> * eval.c (scm_lookupcar, scm_m_letstar, scm_m_do, iqq, diff --git a/libguile/unif.c b/libguile/unif.c index 5b2af435c..2ace9239e 100644 --- a/libguile/unif.c +++ b/libguile/unif.c @@ -1511,7 +1511,9 @@ SCM_DEFINE (scm_uniform_array_read_x, "uniform-array-read!", 1, 3, 0, SCM_ASSERT (SCM_INUMP (port_or_fd) || (SCM_OPINPORTP (port_or_fd)), port_or_fd, SCM_ARG2, FUNC_NAME); - vlen = SCM_INUM (scm_uniform_vector_length (v)); + vlen = (SCM_TYP7 (v) == scm_tc7_smob + ? 0 + : SCM_INUM (scm_uniform_vector_length (v))); loop: switch SCM_TYP7 (v) @@ -1675,8 +1677,10 @@ SCM_DEFINE (scm_uniform_array_write, "uniform-array-write", 1, 3, 0, SCM_ASSERT (SCM_INUMP (port_or_fd) || (SCM_OPOUTPORTP (port_or_fd)), port_or_fd, SCM_ARG2, FUNC_NAME); - vlen = SCM_INUM (scm_uniform_vector_length (v)); - + vlen = (SCM_TYP7 (v) == scm_tc7_smob + ? 0 + : SCM_INUM (scm_uniform_vector_length (v))); + loop: switch SCM_TYP7 (v) { @@ -1686,8 +1690,8 @@ loop: SCM_ASRTGO (SCM_ARRAYP (v), badarg1); v = scm_ra2contig (v, 1); cstart = SCM_ARRAY_BASE (v); - vlen = SCM_ARRAY_DIMS (v)->inc - * (SCM_ARRAY_DIMS (v)->ubnd - SCM_ARRAY_DIMS (v)->lbnd + 1); + vlen = (SCM_ARRAY_DIMS (v)->inc + * (SCM_ARRAY_DIMS (v)->ubnd - SCM_ARRAY_DIMS (v)->lbnd + 1)); v = SCM_ARRAY_V (v); goto loop; case scm_tc7_string: |