diff options
Diffstat (limited to 'src/alloc.c')
| -rw-r--r-- | src/alloc.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/alloc.c b/src/alloc.c index 201e3f0b13f..503ef98b983 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -3353,7 +3353,7 @@ static struct Lisp_Vector * | |||
| 3353 | allocate_vectorlike (ptrdiff_t len) | 3353 | allocate_vectorlike (ptrdiff_t len) |
| 3354 | { | 3354 | { |
| 3355 | eassert (0 < len && len <= VECTOR_ELTS_MAX); | 3355 | eassert (0 < len && len <= VECTOR_ELTS_MAX); |
| 3356 | size_t nbytes = header_size + len * word_size; | 3356 | ptrdiff_t nbytes = header_size + len * word_size; |
| 3357 | struct Lisp_Vector *p; | 3357 | struct Lisp_Vector *p; |
| 3358 | 3358 | ||
| 3359 | MALLOC_BLOCK_INPUT; | 3359 | MALLOC_BLOCK_INPUT; |
| @@ -3496,8 +3496,16 @@ See also the function `vector'. */) | |||
| 3496 | { | 3496 | { |
| 3497 | CHECK_TYPE (FIXNATP (length) && XFIXNAT (length) <= PTRDIFF_MAX, | 3497 | CHECK_TYPE (FIXNATP (length) && XFIXNAT (length) <= PTRDIFF_MAX, |
| 3498 | Qwholenump, length); | 3498 | Qwholenump, length); |
| 3499 | struct Lisp_Vector *p = allocate_vector (XFIXNAT (length)); | 3499 | return make_vector (XFIXNAT (length), init); |
| 3500 | for (ptrdiff_t i = 0; i < XFIXNAT (length); i++) | 3500 | } |
| 3501 | |||
| 3502 | /* Return a new vector of length LENGTH with each element being INIT. */ | ||
| 3503 | |||
| 3504 | Lisp_Object | ||
| 3505 | make_vector (ptrdiff_t length, Lisp_Object init) | ||
| 3506 | { | ||
| 3507 | struct Lisp_Vector *p = allocate_vector (length); | ||
| 3508 | for (ptrdiff_t i = 0; i < length; i++) | ||
| 3501 | p->contents[i] = init; | 3509 | p->contents[i] = init; |
| 3502 | return make_lisp_ptr (p, Lisp_Vectorlike); | 3510 | return make_lisp_ptr (p, Lisp_Vectorlike); |
| 3503 | } | 3511 | } |