summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-03-23 11:33:03 +0100
committerLudovic Courtès <ludo@gnu.org>2020-03-23 22:49:47 +0100
commit168ad279e6bb4be0393a0a23943af535925767fb (patch)
tree11a3e582b3ee5cb6fb867d3cca8e6e7b46fa342d
parentef6f7ce70bfb9310cfec2a87a0a26ad7b9ab355b (diff)
downloadguile-168ad279e6bb4be0393a0a23943af535925767fb.tar.gz
Avoid double initialization in 'vector-copy'.
* libguile/vectors.c (make_vector): New function. (scm_c_make_vector): Use it instead of 'scm_words'. (scm_vector_copy): Use it instead of 'scm_c_make_vector'.
-rw-r--r--libguile/vectors.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/libguile/vectors.c b/libguile/vectors.c
index 1578841c3..0f1e6085e 100644
--- a/libguile/vectors.c
+++ b/libguile/vectors.c
@@ -1,4 +1,4 @@
-/* Copyright 1995-1996,1998-2001,2006,2008-2012,2014,2018-2019
+/* Copyright 1995-1996,1998-2001,2006,2008-2012,2014,2018-2020
Free Software Foundation, Inc.
This file is part of Guile.
@@ -241,6 +241,11 @@ SCM_DEFINE (scm_make_vector, "make-vector", 1, 1, 0,
}
#undef FUNC_NAME
+static SCM
+make_vector (size_t size)
+{
+ return scm_words ((size << 8) | scm_tc7_vector, size + 1);
+}
SCM
scm_c_make_vector (size_t k, SCM fill)
@@ -251,8 +256,7 @@ scm_c_make_vector (size_t k, SCM fill)
SCM_ASSERT_RANGE (1, scm_from_size_t (k), k <= VECTOR_MAX_LENGTH);
- vector = scm_words ((k << 8) | scm_tc7_vector, k + 1);
-
+ vector = make_vector (k);
for (j = 0; j < k; ++j)
SCM_SIMPLE_VECTOR_SET (vector, j, fill);
@@ -273,7 +277,7 @@ SCM_DEFINE (scm_vector_copy, "vector-copy", 1, 0, 0,
src = scm_vector_elements (vec, &handle, &len, &inc);
- result = scm_c_make_vector (len, SCM_UNDEFINED);
+ result = make_vector (len);
dst = SCM_I_VECTOR_WELTS (result);
for (i = 0; i < len; i++, src += inc)
dst[i] = *src;