1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-25 06:00:18 +02:00

(scm_uniform_vector_ref): For byvect, force signed char so as

not to depend on C char signedness.
(scm_array_set_x): For byvect, add range check, per array-fill!.
This commit is contained in:
Kevin Ryde 2004-08-06 00:47:24 +00:00
parent d6c803c761
commit 29da36e4ab

View file

@ -1163,7 +1163,7 @@ SCM_DEFINE (scm_uniform_vector_ref, "uniform-vector-ref", 2, 0, 0,
case scm_tc7_string:
return SCM_MAKE_CHAR (SCM_STRING_UCHARS (v)[pos]);
case scm_tc7_byvect:
return SCM_MAKINUM (((char *) SCM_UVECTOR_BASE (v))[pos]);
return SCM_MAKINUM (((signed char *) SCM_UVECTOR_BASE (v))[pos]);
case scm_tc7_uvect:
return scm_ulong2num (((unsigned long *) SCM_VELTS (v))[pos]);
case scm_tc7_ivect:
@ -1326,8 +1326,10 @@ SCM_DEFINE (scm_array_set_x, "array-set!", 2, 0, 1,
break;
case scm_tc7_byvect:
if (SCM_CHARP (obj))
obj = SCM_MAKINUM ((char) SCM_CHAR (obj));
obj = SCM_MAKINUM ((signed char) SCM_CHAR (obj));
SCM_ASRTGO (SCM_INUMP (obj), badobj);
SCM_ASSERT_RANGE (SCM_ARG2, obj,
-128 <= SCM_INUM (obj) && SCM_INUM (obj) < 128);
((char *) SCM_UVECTOR_BASE (v))[pos] = SCM_INUM (obj);
break;
case scm_tc7_uvect: