aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval.c
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-10-12 07:38:56 +0800
committerGitHub <noreply@github.com>2023-10-12 07:38:56 +0800
commit3cbb02ce77087a820decd1a724a6e8b666e0ca36 (patch)
tree2cd4ee786677f4730e8526158efd6ecc13e0eb6e /src/nvim/eval.c
parentf4c85b9ad184dc31aa192588c4e1b068f5a5fbc5 (diff)
downloadrneovim-3cbb02ce77087a820decd1a724a6e8b666e0ca36.tar.gz
rneovim-3cbb02ce77087a820decd1a724a6e8b666e0ca36.tar.bz2
rneovim-3cbb02ce77087a820decd1a724a6e8b666e0ca36.zip
vim-patch:8.2.3064: Vim9: in script cannot set item in uninitialized list (#25605)
Problem: Vim9: in script cannot set item in uninitialized list. Solution: When a list is NULL allocate an empty one. (closes vim/vim#8461) https://github.com/vim/vim/commit/e65081d1b591f16dc6e380a830d87565c5eb7b03 Co-authored-by: Bram Moolenaar <Bram@vim.org>
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r--src/nvim/eval.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index ee0860a8d1..f9b32d758d 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -1467,14 +1467,22 @@ char *get_lval(char *const name, typval_T *const rettv, lval_T *const lp, const
}
return NULL;
}
- if (!(lp->ll_tv->v_type == VAR_LIST && lp->ll_tv->vval.v_list != NULL)
- && !(lp->ll_tv->v_type == VAR_DICT && lp->ll_tv->vval.v_dict != NULL)
- && !(lp->ll_tv->v_type == VAR_BLOB && lp->ll_tv->vval.v_blob != NULL)) {
+ if (lp->ll_tv->v_type != VAR_LIST
+ && lp->ll_tv->v_type != VAR_DICT
+ && lp->ll_tv->v_type != VAR_BLOB) {
if (!quiet) {
emsg(_("E689: Can only index a List, Dictionary or Blob"));
}
return NULL;
}
+
+ // a NULL list/blob works like an empty list/blob, allocate one now.
+ if (lp->ll_tv->v_type == VAR_LIST && lp->ll_tv->vval.v_list == NULL) {
+ tv_list_alloc_ret(lp->ll_tv, kListLenUnknown);
+ } else if (lp->ll_tv->v_type == VAR_BLOB && lp->ll_tv->vval.v_blob == NULL) {
+ tv_blob_alloc_ret(lp->ll_tv);
+ }
+
if (lp->ll_range) {
if (!quiet) {
emsg(_("E708: [:] must come last"));