Mercurial > vim
comparison src/vim9execute.c @ 26626:4d18b3a5254a v8.2.3842
patch 8.2.3842: Vim9: can change locked list and list items
Commit: https://github.com/vim/vim/commit/422085f1c87cb6bea879158b8b05c4a5cf7ab48b
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Dec 17 20:36:15 2021 +0000
patch 8.2.3842: Vim9: can change locked list and list items
Problem: Vim9: can change locked list and list items.
Solution: Check that a list and list item isn't locked.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 17 Dec 2021 21:45:03 +0100 |
parents | bdf11d8e3df3 |
children | 2fc1e528e0e1 |
comparison
equal
deleted
inserted
replaced
26625:05e524ae9236 | 26626:4d18b3a5254a |
---|---|
2896 } | 2896 } |
2897 else | 2897 else |
2898 { | 2898 { |
2899 list_T *l = tv_dest->vval.v_list; | 2899 list_T *l = tv_dest->vval.v_list; |
2900 long n = (long)tv_idx->vval.v_number; | 2900 long n = (long)tv_idx->vval.v_number; |
2901 listitem_T *li = NULL; | 2901 |
2902 | 2902 if (l != NULL && value_check_lock( |
2903 li = list_find(l, n); | 2903 l->lv_lock, NULL, FALSE)) |
2904 if (li == NULL) | 2904 status = FAIL; |
2905 else | |
2905 { | 2906 { |
2906 SOURCING_LNUM = iptr->isn_lnum; | 2907 listitem_T *li = list_find(l, n); |
2907 semsg(_(e_listidx), n); | 2908 |
2908 status = FAIL; | 2909 if (li == NULL) |
2910 { | |
2911 SOURCING_LNUM = iptr->isn_lnum; | |
2912 semsg(_(e_listidx), n); | |
2913 status = FAIL; | |
2914 } | |
2915 else if (value_check_lock(li->li_tv.v_lock, | |
2916 NULL, FALSE)) | |
2917 status = FAIL; | |
2918 else | |
2919 listitem_remove(l, li); | |
2909 } | 2920 } |
2910 else | |
2911 // TODO: check for list or item locked | |
2912 listitem_remove(l, li); | |
2913 } | 2921 } |
2914 } | 2922 } |
2915 else | 2923 else |
2916 { | 2924 { |
2917 status = FAIL; | 2925 status = FAIL; |