[Guile-commits] 05/08: Support non-zero lower bounds in array-slice-for-each
lloda pushed a commit to branch wip-lloda in repository guile. commit 0a5023149d260f0802b8c5f3332e90810bef0372 Author: Daniel LlorensDate: Mon Feb 13 13:49:35 2017 +0100 Support non-zero lower bounds in array-slice-for-each * libguile/array-handle.c (scm_array_handle_writable_elements): Fix error message. * libguile/array-map.c (scm_array_slice_for_each): Support non-zero lower bounds. Fix error messages. * test-suite/tests/array-map.test: Test scm_array_slice_for_each with non-zero lower bound argument. --- libguile/array-map.c| 22 +- test-suite/tests/array-map.test | 8 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/libguile/array-map.c b/libguile/array-map.c index 651a1bf..29e4aa7 100644 --- a/libguile/array-map.c +++ b/libguile/array-map.c @@ -679,6 +679,7 @@ SCM_DEFINE (scm_array_slice_for_each, "array-slice-for-each", 2, 0, 1, "@end lisp") #define FUNC_NAME s_scm_array_slice_for_each { + SCM xargs = args; int const N = scm_ilength (args); int const frank = scm_to_int (frame_rank); int ocd; @@ -742,9 +743,9 @@ SCM_DEFINE (scm_array_slice_for_each, "array-slice-for-each", 2, 0, 1, assert((pool0+pool_size==pool) && "internal error"); #undef AFIC_ALLOC_ADVANCE - for (n=0; scm_is_pair(args); args=scm_cdr(args), ++n) + for (n=0, xargs=args; scm_is_pair(xargs); xargs=scm_cdr(xargs), ++n) { - args_[n] = scm_car(args); + args_[n] = scm_car(xargs); scm_array_get_handle(args_[n], ah+n); as[n] = scm_array_handle_dims(ah+n); rank[n] = scm_array_handle_rank(ah+n); @@ -752,29 +753,24 @@ SCM_DEFINE (scm_array_slice_for_each, "array-slice-for-each", 2, 0, 1, /* checks */ msg = NULL; if (frank<0) -msg = "bad frame rank"; +msg = "bad frame rank ~S, ~S"; else { for (n=0; n!=N; ++n) { if (rank[n] typed-array 'f64 2 '((9 1) (7 8
[Guile-commits] 05/08: Support non-zero lower bounds in array-slice-for-each
lloda pushed a commit to branch wip-exception-truncate in repository guile. commit 592d6aa32dfdfbaa0c0130a4017201c761a6 Author: Daniel LlorensDate: Mon Feb 13 13:49:35 2017 +0100 Support non-zero lower bounds in array-slice-for-each * libguile/array-handle.c (scm_array_handle_writable_elements): Fix error message. * libguile/array-map.c (scm_array_slice_for_each): Support non-zero lower bounds. Fix error messages. * test-suite/tests/array-map.test: Test scm_array_slice_for_each with non-zero lower bound argument. --- libguile/array-handle.c | 2 +- libguile/array-map.c| 22 +- test-suite/tests/array-map.test | 8 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/libguile/array-handle.c b/libguile/array-handle.c index 89277d9..4c2fe0e 100644 --- a/libguile/array-handle.c +++ b/libguile/array-handle.c @@ -327,7 +327,7 @@ SCM * scm_array_handle_writable_elements (scm_t_array_handle *h) { if (h->element_type != SCM_ARRAY_ELEMENT_TYPE_SCM) -scm_wrong_type_arg_msg (NULL, 0, h->array, "non-uniform array"); +scm_wrong_type_arg_msg (NULL, 0, h->array, "array of Scheme values"); return ((SCM*)h->elements) + h->base; } diff --git a/libguile/array-map.c b/libguile/array-map.c index c2825bc..b6529c0 100644 --- a/libguile/array-map.c +++ b/libguile/array-map.c @@ -677,6 +677,7 @@ SCM_DEFINE (scm_array_slice_for_each, "array-slice-for-each", 2, 0, 1, "@end lisp") #define FUNC_NAME s_scm_array_slice_for_each { + SCM xargs = args; int const N = scm_ilength (args); int const frank = scm_to_int (frame_rank); int ocd; @@ -740,9 +741,9 @@ SCM_DEFINE (scm_array_slice_for_each, "array-slice-for-each", 2, 0, 1, assert((pool0+pool_size==pool) && "internal error"); #undef AFIC_ALLOC_ADVANCE - for (n=0; scm_is_pair(args); args=scm_cdr(args), ++n) + for (n=0, xargs=args; scm_is_pair(xargs); xargs=scm_cdr(xargs), ++n) { - args_[n] = scm_car(args); + args_[n] = scm_car(xargs); scm_array_get_handle(args_[n], ah+n); as[n] = scm_array_handle_dims(ah+n); rank[n] = scm_array_handle_rank(ah+n); @@ -750,29 +751,24 @@ SCM_DEFINE (scm_array_slice_for_each, "array-slice-for-each", 2, 0, 1, /* checks */ msg = NULL; if (frank<0) -msg = "bad frame rank"; +msg = "bad frame rank ~S, ~S"; else { for (n=0; n!=N; ++n) { if (rank[n] typed-array 'f64 2 '((9 1) (7 8
[Guile-commits] 05/08: Support non-zero lower bounds in array-slice-for-each
lloda pushed a commit to branch wip-exception-truncate in repository guile. commit 88b249d576b2a2751a9af059d797be9368b58957 Author: Daniel LlorensDate: Mon Feb 13 13:49:35 2017 +0100 Support non-zero lower bounds in array-slice-for-each * libguile/array-handle.c (scm_array_handle_writable_elements): Fix error message. * libguile/array-map.c (scm_array_slice_for_each): Support non-zero lower bounds. Fix error messages. * test-suite/tests/array-map.test: Test scm_array_slice_for_each with non-zero lower bound argument. --- libguile/array-handle.c | 2 +- libguile/array-map.c| 22 +- test-suite/tests/array-map.test | 8 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/libguile/array-handle.c b/libguile/array-handle.c index 89277d9..4c2fe0e 100644 --- a/libguile/array-handle.c +++ b/libguile/array-handle.c @@ -327,7 +327,7 @@ SCM * scm_array_handle_writable_elements (scm_t_array_handle *h) { if (h->element_type != SCM_ARRAY_ELEMENT_TYPE_SCM) -scm_wrong_type_arg_msg (NULL, 0, h->array, "non-uniform array"); +scm_wrong_type_arg_msg (NULL, 0, h->array, "array of Scheme values"); return ((SCM*)h->elements) + h->base; } diff --git a/libguile/array-map.c b/libguile/array-map.c index c2825bc..b6529c0 100644 --- a/libguile/array-map.c +++ b/libguile/array-map.c @@ -677,6 +677,7 @@ SCM_DEFINE (scm_array_slice_for_each, "array-slice-for-each", 2, 0, 1, "@end lisp") #define FUNC_NAME s_scm_array_slice_for_each { + SCM xargs = args; int const N = scm_ilength (args); int const frank = scm_to_int (frame_rank); int ocd; @@ -740,9 +741,9 @@ SCM_DEFINE (scm_array_slice_for_each, "array-slice-for-each", 2, 0, 1, assert((pool0+pool_size==pool) && "internal error"); #undef AFIC_ALLOC_ADVANCE - for (n=0; scm_is_pair(args); args=scm_cdr(args), ++n) + for (n=0, xargs=args; scm_is_pair(xargs); xargs=scm_cdr(xargs), ++n) { - args_[n] = scm_car(args); + args_[n] = scm_car(xargs); scm_array_get_handle(args_[n], ah+n); as[n] = scm_array_handle_dims(ah+n); rank[n] = scm_array_handle_rank(ah+n); @@ -750,29 +751,24 @@ SCM_DEFINE (scm_array_slice_for_each, "array-slice-for-each", 2, 0, 1, /* checks */ msg = NULL; if (frank<0) -msg = "bad frame rank"; +msg = "bad frame rank ~S, ~S"; else { for (n=0; n!=N; ++n) { if (rank[n] typed-array 'f64 2 '((9 1) (7 8