diff options
-rw-r--r-- | THANKS | 1 | ||||
-rw-r--r-- | libguile/ChangeLog | 5 | ||||
-rw-r--r-- | libguile/unif.c | 64 |
3 files changed, 42 insertions, 28 deletions
@@ -34,6 +34,7 @@ For fixes or providing information which led to a fix: Bill Schottstaedt Miroslav Silovic Dale P. Smith + Masao Uebayashi Jacques A. Vidrine Brett Viren William Webber diff --git a/libguile/ChangeLog b/libguile/ChangeLog index d8cff0871..a7525c6f5 100644 --- a/libguile/ChangeLog +++ b/libguile/ChangeLog @@ -1,5 +1,10 @@ 2001-04-19 Dirk Herrmann <D.Herrmann@tu-bs.de> + * unif.c (scm_array_to_list): Added missing handling of arrays of + bytes. Thanks to Masao Uebayashi for the bug report. + +2001-04-19 Dirk Herrmann <D.Herrmann@tu-bs.de> + * debug.c (scm_procedure_source): Use SCM_CLOSURE_FORMALS more consistently. diff --git a/libguile/unif.c b/libguile/unif.c index d183dddb9..afb0a0cf2 100644 --- a/libguile/unif.c +++ b/libguile/unif.c @@ -2108,36 +2108,44 @@ SCM_DEFINE (scm_array_to_list, "array->list", 1, 0, 0, res = scm_cons (SCM_BOOL(((long *) data)[k] & mask), res); return res; } - case scm_tc7_uvect: { - long *data = (long *)SCM_VELTS(v); - for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--) - res = scm_cons(scm_ulong2num(data[k]), res); - return res; - } - case scm_tc7_ivect: { - long *data = (long *)SCM_VELTS(v); - for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--) - res = scm_cons(scm_long2num(data[k]), res); - return res; - } - case scm_tc7_svect: { - short *data; - data = (short *)SCM_VELTS(v); - for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--) - res = scm_cons(SCM_MAKINUM (data[k]), res); - return res; - } + case scm_tc7_byvect: + { + signed char *data = (signed char *) SCM_VELTS (v); + scm_sizet k = SCM_UVECTOR_LENGTH (v); + while (k != 0) + res = scm_cons (SCM_MAKINUM (data[--k]), res); + return res; + } + case scm_tc7_uvect: + { + long *data = (long *)SCM_VELTS(v); + for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--) + res = scm_cons(scm_ulong2num(data[k]), res); + return res; + } + case scm_tc7_ivect: + { + long *data = (long *)SCM_VELTS(v); + for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--) + res = scm_cons(scm_long2num(data[k]), res); + return res; + } + case scm_tc7_svect: + { + short *data = (short *)SCM_VELTS(v); + for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--) + res = scm_cons(SCM_MAKINUM (data[k]), res); + return res; + } #ifdef HAVE_LONG_LONGS - case scm_tc7_llvect: { - long_long *data; - data = (long_long *)SCM_VELTS(v); - for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--) - res = scm_cons(scm_long_long2num(data[k]), res); - return res; - } + case scm_tc7_llvect: + { + long_long *data = (long_long *)SCM_VELTS(v); + for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--) + res = scm_cons(scm_long_long2num(data[k]), res); + return res; + } #endif - - case scm_tc7_fvect: { float *data = (float *) SCM_VELTS (v); |