summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libguile/ChangeLog5
-rw-r--r--libguile/unif.c14
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: