From a8b0d63648fcaa91df58a8fcc7c7072fba9a7407 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Wed, 12 Jun 2019 07:28:34 -0700 Subject: ffi: adjust in semantics of variable zarray. The replace function now returns a list if a nil object's is replaced with a range, rather than just returning the original item sequence. This breaks the variable array in operation, causing it to produce a list. We fix this sproblem, and also the nonsense semantics of the operation also; the operation should replace the original sequence, with the array, similarly to how null terminated strings work. * ffi.c (ffi_varray_null_term_in): If the original Lisp object isn't nil, then assume it's a sequence and replace it with the items gathered in the vector. Otherwise, replace it with the vector. * txr.1: Adjust documentation. --- ffi.c | 2 +- txr.1 | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/ffi.c b/ffi.c index 61551228..f8d7b566 100644 --- a/ffi.c +++ b/ffi.c @@ -2456,7 +2456,7 @@ static val ffi_varray_null_term_in(struct txr_ffi_type *tft, int copy, mem_t *sr offs += elsize; } - return replace(vec_in, vec, zero, length_vec(vec)); + return if3(vec_in, replace(vec_in, vec, zero, t), vec); } static val ffi_varray_null_term_get(struct txr_ffi_type *tft, mem_t *src, diff --git a/txr.1 b/txr.1 index 07c07dec..ded3d636 100644 --- a/txr.1 +++ b/txr.1 @@ -61592,12 +61592,8 @@ The variable-length .code zarray also has a special in operation. Like the get operation, the in operation extracts all elements until a terminating null, decoding them to a vector. -Then, a range of the original vector object is replaced with the decoded vector. -If the decoded vector is as long, or longer, than the original, all of the -elements of the original are replaced and its length is extended as necessary -to contain all of the new elements. If the decoded vector is shorter than the -decoded one, then it replaces a range of the original one corresponding to -its length. +Then, the entire original vector is replaced with the new vector, +even if the original vector is longer. .coNP FFI type @ ptr .synb -- cgit v1.2.3