summaryrefslogtreecommitdiff
path: root/src/vim9execute.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vim9execute.c')
-rw-r--r--src/vim9execute.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/src/vim9execute.c b/src/vim9execute.c
index a376d00a5..afd0a613d 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -2898,18 +2898,26 @@ exec_instructions(ectx_T *ectx)
{
list_T *l = tv_dest->vval.v_list;
long n = (long)tv_idx->vval.v_number;
- listitem_T *li = NULL;
- li = list_find(l, n);
- if (li == NULL)
- {
- SOURCING_LNUM = iptr->isn_lnum;
- semsg(_(e_listidx), n);
+ if (l != NULL && value_check_lock(
+ l->lv_lock, NULL, FALSE))
status = FAIL;
- }
else
- // TODO: check for list or item locked
- listitem_remove(l, li);
+ {
+ listitem_T *li = list_find(l, n);
+
+ if (li == NULL)
+ {
+ SOURCING_LNUM = iptr->isn_lnum;
+ semsg(_(e_listidx), n);
+ status = FAIL;
+ }
+ else if (value_check_lock(li->li_tv.v_lock,
+ NULL, FALSE))
+ status = FAIL;
+ else
+ listitem_remove(l, li);
+ }
}
}
else