diff options
-rw-r--r-- | lib.c | 13 |
1 files changed, 7 insertions, 6 deletions
@@ -9665,7 +9665,7 @@ static val *vec_allocate(ucnum len, val self) return coerce(val *, chk_xalloc(size, sizeof (val), self)); } -static val vec_own(val *v, val length) +static val vec_own(val *v, val length, val alloc) { val vec = make_obj(); @@ -9675,7 +9675,7 @@ static val vec_own(val *v, val length) #endif v += 2; vec->v.vec = v; - v[vec_alloc] = length; + v[vec_alloc] = alloc; v[vec_length] = length; return vec; @@ -9695,8 +9695,9 @@ val vector(val length, val initval) val self = lit("vector"); ucnum len = c_unum(length, self); - val *v = vec_allocate(len, self); - val vec = vec_own(v, length); + ucnum alloc = max(6, len); + val *v = vec_allocate(alloc, self); + val vec = vec_own(v, length, unum(alloc)); vec_init(v, len, initval); return vec; } @@ -9867,7 +9868,7 @@ val copy_vec(val vec_in) val length = length_vec(vec_in); ucnum len = c_unum(length, self); val *v = vec_allocate(len, self); - val vec = vec_own(v, length); + val vec = vec_own(v, length, length); memcpy(v + 2, vec_in->v.vec, len * sizeof *v); return vec; } @@ -10166,7 +10167,7 @@ val nested_vec_of_v(val initval, struct args *args) for (i = 0; i < n; i++) rawvec[i + 2] = nested_vec_of_v(initval, args_copy); - vec = vec_own(rawvec, dim); + vec = vec_own(rawvec, dim, dim); gc_state(gc_save); return vec; } else { |