1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-15 10:10:21 +02:00

Require vector as argument to vector-copy

* libguile/vectors.c: Require vector and simplify.
This commit is contained in:
Daniel Llorens 2020-02-03 11:21:20 +01:00
parent 2b4e45ca1b
commit 21ede682af

View file

@ -33,6 +33,7 @@
#include "numbers.h" #include "numbers.h"
#include "pairs.h" #include "pairs.h"
#include "vectors.h" #include "vectors.h"
#include <string.h>
#include "generalized-vectors.h" #include "generalized-vectors.h"
@ -269,22 +270,11 @@ SCM_DEFINE (scm_vector_copy, "vector-copy", 1, 0, 0,
"Return a copy of @var{vec}.") "Return a copy of @var{vec}.")
#define FUNC_NAME s_scm_vector_copy #define FUNC_NAME s_scm_vector_copy
{ {
scm_t_array_handle handle; SCM_VALIDATE_VECTOR(1, vec);
size_t i, len; size_t len = SCM_I_VECTOR_LENGTH (vec);
ssize_t inc; SCM val = make_vector (len);
const SCM *src; memcpy (SCM_I_VECTOR_WELTS (val), SCM_I_VECTOR_ELTS (vec), len * sizeof(SCM));
SCM result, *dst; return val;
src = scm_vector_elements (vec, &handle, &len, &inc);
result = make_vector (len);
dst = SCM_I_VECTOR_WELTS (result);
for (i = 0; i < len; i++, src += inc)
dst[i] = *src;
scm_array_handle_release (&handle);
return result;
} }
#undef FUNC_NAME #undef FUNC_NAME