mirror of
https://github.com/neovim/neovim.git
synced 2025-09-21 10:48:18 +00:00
eval/typval: Make tv_list_concat handle NULL lists correctly
Fixes some FIXMEs in eval/null_spec.lua.
This commit is contained in:
@@ -498,20 +498,25 @@ void tv_list_extend(list_T *const l1, list_T *const l2,
|
||||
int tv_list_concat(list_T *const l1, list_T *const l2, typval_T *const tv)
|
||||
FUNC_ATTR_WARN_UNUSED_RESULT
|
||||
{
|
||||
if (l1 == NULL || l2 == NULL) {
|
||||
return FAIL;
|
||||
}
|
||||
list_T *l;
|
||||
|
||||
// make a copy of the first list.
|
||||
list_T *const l = tv_list_copy(NULL, l1, false, 0);
|
||||
if (l == NULL) {
|
||||
return FAIL;
|
||||
}
|
||||
tv->v_type = VAR_LIST;
|
||||
tv->vval.v_list = l;
|
||||
|
||||
// append all items from the second list
|
||||
tv_list_extend(l, l2, NULL);
|
||||
if (l1 == NULL && l2 == NULL) {
|
||||
l = NULL;
|
||||
} else if (l1 == NULL) {
|
||||
l = tv_list_copy(NULL, l2, false, 0);
|
||||
} else {
|
||||
l = tv_list_copy(NULL, l1, false, 0);
|
||||
if (l != NULL && l2 != NULL) {
|
||||
tv_list_extend(l, l2, NULL);
|
||||
}
|
||||
}
|
||||
if (l == NULL && !(l1 == NULL && l2 == NULL)) {
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
tv->vval.v_list = l;
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user