From 2b414e247fcf28b9431a326b59decebbe859bdb8 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Thu, 22 Dec 2011 17:03:04 -0500 Subject: fix generalized-vector-{ref,set!} for slices * libguile/generalized-vectors.c (scm_c_generalized_vector_ref): (scm_c_generalized_vector_set_x): Fix for the case in which base was not 1, lbnd was not 0, or inc was not 1. * test-suite/tests/arrays.test (array): Add a test. Thanks to Daniel Llorens for the report. --- libguile/generalized-vectors.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'libguile/generalized-vectors.c') diff --git a/libguile/generalized-vectors.c b/libguile/generalized-vectors.c index b65b654fb..d8a3bf8d3 100644 --- a/libguile/generalized-vectors.c +++ b/libguile/generalized-vectors.c @@ -131,9 +131,11 @@ SCM scm_c_generalized_vector_ref (SCM v, size_t idx) { scm_t_array_handle h; + size_t pos; SCM ret; scm_generalized_vector_get_handle (v, &h); - ret = h.impl->vref (&h, idx); + pos = h.base + h.dims[0].lbnd + idx * h.dims[0].inc; + ret = h.impl->vref (&h, pos); scm_array_handle_release (&h); return ret; } @@ -152,8 +154,10 @@ void scm_c_generalized_vector_set_x (SCM v, size_t idx, SCM val) { scm_t_array_handle h; + size_t pos; scm_generalized_vector_get_handle (v, &h); - h.impl->vset (&h, idx, val); + pos = h.base + h.dims[0].lbnd + idx * h.dims[0].inc; + h.impl->vset (&h, pos, val); scm_array_handle_release (&h); } -- cgit v1.2.3