comparison src/list.c @ 22298:07e48ee8c3bb v8.2.1698

patch 8.2.1698: cannot lock a variable in legacy Vim script like in Vim9 Commit: https://github.com/vim/vim/commit/a187c43cfe8863d48b2159d695fedcb71f8525c1 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Sep 16 21:08:28 2020 +0200 patch 8.2.1698: cannot lock a variable in legacy Vim script like in Vim9 Problem: Cannot lock a variable in legacy Vim script like in Vim9. Solution: Make ":lockvar 0" work.
author Bram Moolenaar <Bram@vim.org>
date Wed, 16 Sep 2020 21:15:05 +0200
parents b50610a6aee0
children 4ce3906e5997
comparison
equal deleted inserted replaced
22297:3d2dc70119a7 22298:07e48ee8c3bb
815 return; 815 return;
816 } 816 }
817 } 817 }
818 818
819 l = argvars[0].vval.v_list; 819 l = argvars[0].vval.v_list;
820 if (l != NULL && !var_check_lock(l->lv_lock, 820 if (l != NULL && !value_check_lock(l->lv_lock,
821 (char_u *)N_("flatten() argument"), TRUE) 821 (char_u *)N_("flatten() argument"), TRUE)
822 && list_flatten(l, maxdepth) == OK) 822 && list_flatten(l, maxdepth) == OK)
823 copy_tv(&argvars[0], rettv); 823 copy_tv(&argvars[0], rettv);
824 } 824 }
825 825
1437 listitem_T *li; 1437 listitem_T *li;
1438 int error = FALSE; 1438 int error = FALSE;
1439 int idx; 1439 int idx;
1440 1440
1441 if ((l = argvars[0].vval.v_list) == NULL 1441 if ((l = argvars[0].vval.v_list) == NULL
1442 || var_check_lock(l->lv_lock, arg_errmsg, TRUE)) 1442 || value_check_lock(l->lv_lock, arg_errmsg, TRUE))
1443 return; 1443 return;
1444 1444
1445 idx = (long)tv_get_number_chk(&argvars[1], &error); 1445 idx = (long)tv_get_number_chk(&argvars[1], &error);
1446 if (error) 1446 if (error)
1447 ; // type error: do nothing, errmsg already given 1447 ; // type error: do nothing, errmsg already given
1685 if (argvars[0].v_type != VAR_LIST) 1685 if (argvars[0].v_type != VAR_LIST)
1686 semsg(_(e_listarg), sort ? "sort()" : "uniq()"); 1686 semsg(_(e_listarg), sort ? "sort()" : "uniq()");
1687 else 1687 else
1688 { 1688 {
1689 l = argvars[0].vval.v_list; 1689 l = argvars[0].vval.v_list;
1690 if (l == NULL || var_check_lock(l->lv_lock, 1690 if (l == NULL || value_check_lock(l->lv_lock,
1691 (char_u *)(sort ? N_("sort() argument") : N_("uniq() argument")), 1691 (char_u *)(sort ? N_("sort() argument") : N_("uniq() argument")),
1692 TRUE)) 1692 TRUE))
1693 goto theend; 1693 goto theend;
1694 rettv_list_set(rettv, l); 1694 rettv_list_set(rettv, l);
1695 CHECK_LIST_MATERIALIZE(l); 1695 CHECK_LIST_MATERIALIZE(l);
1953 return; 1953 return;
1954 } 1954 }
1955 else if (argvars[0].v_type == VAR_LIST) 1955 else if (argvars[0].v_type == VAR_LIST)
1956 { 1956 {
1957 if ((l = argvars[0].vval.v_list) == NULL 1957 if ((l = argvars[0].vval.v_list) == NULL
1958 || (!map && var_check_lock(l->lv_lock, arg_errmsg, TRUE))) 1958 || (!map && value_check_lock(l->lv_lock, arg_errmsg, TRUE)))
1959 return; 1959 return;
1960 } 1960 }
1961 else if (argvars[0].v_type == VAR_DICT) 1961 else if (argvars[0].v_type == VAR_DICT)
1962 { 1962 {
1963 if ((d = argvars[0].vval.v_dict) == NULL 1963 if ((d = argvars[0].vval.v_dict) == NULL
1964 || (!map && var_check_lock(d->dv_lock, arg_errmsg, TRUE))) 1964 || (!map && value_check_lock(d->dv_lock, arg_errmsg, TRUE)))
1965 return; 1965 return;
1966 } 1966 }
1967 else 1967 else
1968 { 1968 {
1969 semsg(_(e_listdictblobarg), ermsg); 1969 semsg(_(e_listdictblobarg), ermsg);
2002 { 2002 {
2003 int r; 2003 int r;
2004 2004
2005 --todo; 2005 --todo;
2006 di = HI2DI(hi); 2006 di = HI2DI(hi);
2007 if (map && (var_check_lock(di->di_tv.v_lock, 2007 if (map && (value_check_lock(di->di_tv.v_lock,
2008 arg_errmsg, TRUE) 2008 arg_errmsg, TRUE)
2009 || var_check_ro(di->di_flags, 2009 || var_check_ro(di->di_flags,
2010 arg_errmsg, TRUE))) 2010 arg_errmsg, TRUE)))
2011 break; 2011 break;
2012 set_vim_var_string(VV_KEY, di->di_key, -1); 2012 set_vim_var_string(VV_KEY, di->di_key, -1);
2075 CHECK_LIST_MATERIALIZE(l); 2075 CHECK_LIST_MATERIALIZE(l);
2076 if (map && l->lv_lock == 0) 2076 if (map && l->lv_lock == 0)
2077 l->lv_lock = VAR_LOCKED; 2077 l->lv_lock = VAR_LOCKED;
2078 for (li = l->lv_first; li != NULL; li = nli) 2078 for (li = l->lv_first; li != NULL; li = nli)
2079 { 2079 {
2080 if (map && var_check_lock(li->li_tv.v_lock, arg_errmsg, TRUE)) 2080 if (map && value_check_lock(li->li_tv.v_lock, arg_errmsg, TRUE))
2081 break; 2081 break;
2082 nli = li->li_next; 2082 nli = li->li_next;
2083 set_vim_var_nr(VV_KEY, idx); 2083 set_vim_var_nr(VV_KEY, idx);
2084 if (filter_map_one(&li->li_tv, expr, map, &rem) == FAIL 2084 if (filter_map_one(&li->li_tv, expr, map, &rem) == FAIL
2085 || did_emsg) 2085 || did_emsg)
2129 2129
2130 rettv->vval.v_number = 1; // Default: Failed 2130 rettv->vval.v_number = 1; // Default: Failed
2131 if (argvars[0].v_type == VAR_LIST) 2131 if (argvars[0].v_type == VAR_LIST)
2132 { 2132 {
2133 if ((l = argvars[0].vval.v_list) != NULL 2133 if ((l = argvars[0].vval.v_list) != NULL
2134 && !var_check_lock(l->lv_lock, 2134 && !value_check_lock(l->lv_lock,
2135 (char_u *)N_("add() argument"), TRUE) 2135 (char_u *)N_("add() argument"), TRUE)
2136 && list_append_tv(l, &argvars[1]) == OK) 2136 && list_append_tv(l, &argvars[1]) == OK)
2137 copy_tv(&argvars[0], rettv); 2137 copy_tv(&argvars[0], rettv);
2138 } 2138 }
2139 else if (argvars[0].v_type == VAR_BLOB) 2139 else if (argvars[0].v_type == VAR_BLOB)
2140 { 2140 {
2141 if ((b = argvars[0].vval.v_blob) != NULL 2141 if ((b = argvars[0].vval.v_blob) != NULL
2142 && !var_check_lock(b->bv_lock, 2142 && !value_check_lock(b->bv_lock,
2143 (char_u *)N_("add() argument"), TRUE)) 2143 (char_u *)N_("add() argument"), TRUE))
2144 { 2144 {
2145 int error = FALSE; 2145 int error = FALSE;
2146 varnumber_T n = tv_get_number_chk(&argvars[1], &error); 2146 varnumber_T n = tv_get_number_chk(&argvars[1], &error);
2147 2147
2280 long before; 2280 long before;
2281 int error = FALSE; 2281 int error = FALSE;
2282 2282
2283 l1 = argvars[0].vval.v_list; 2283 l1 = argvars[0].vval.v_list;
2284 l2 = argvars[1].vval.v_list; 2284 l2 = argvars[1].vval.v_list;
2285 if (l1 != NULL && !var_check_lock(l1->lv_lock, arg_errmsg, TRUE) 2285 if (l1 != NULL && !value_check_lock(l1->lv_lock, arg_errmsg, TRUE)
2286 && l2 != NULL) 2286 && l2 != NULL)
2287 { 2287 {
2288 if (argvars[2].v_type != VAR_UNKNOWN) 2288 if (argvars[2].v_type != VAR_UNKNOWN)
2289 { 2289 {
2290 before = (long)tv_get_number_chk(&argvars[2], &error); 2290 before = (long)tv_get_number_chk(&argvars[2], &error);
2316 char_u *action; 2316 char_u *action;
2317 int i; 2317 int i;
2318 2318
2319 d1 = argvars[0].vval.v_dict; 2319 d1 = argvars[0].vval.v_dict;
2320 d2 = argvars[1].vval.v_dict; 2320 d2 = argvars[1].vval.v_dict;
2321 if (d1 != NULL && !var_check_lock(d1->dv_lock, arg_errmsg, TRUE) 2321 if (d1 != NULL && !value_check_lock(d1->dv_lock, arg_errmsg, TRUE)
2322 && d2 != NULL) 2322 && d2 != NULL)
2323 { 2323 {
2324 // Check the third argument. 2324 // Check the third argument.
2325 if (argvars[2].v_type != VAR_UNKNOWN) 2325 if (argvars[2].v_type != VAR_UNKNOWN)
2326 { 2326 {
2400 copy_tv(&argvars[0], rettv); 2400 copy_tv(&argvars[0], rettv);
2401 } 2401 }
2402 else if (argvars[0].v_type != VAR_LIST) 2402 else if (argvars[0].v_type != VAR_LIST)
2403 semsg(_(e_listblobarg), "insert()"); 2403 semsg(_(e_listblobarg), "insert()");
2404 else if ((l = argvars[0].vval.v_list) != NULL 2404 else if ((l = argvars[0].vval.v_list) != NULL
2405 && !var_check_lock(l->lv_lock, 2405 && !value_check_lock(l->lv_lock,
2406 (char_u *)N_("insert() argument"), TRUE)) 2406 (char_u *)N_("insert() argument"), TRUE))
2407 { 2407 {
2408 if (argvars[2].v_type != VAR_UNKNOWN) 2408 if (argvars[2].v_type != VAR_UNKNOWN)
2409 before = (long)tv_get_number_chk(&argvars[2], &error); 2409 before = (long)tv_get_number_chk(&argvars[2], &error);
2410 if (error) 2410 if (error)
2473 } 2473 }
2474 2474
2475 if (argvars[0].v_type != VAR_LIST) 2475 if (argvars[0].v_type != VAR_LIST)
2476 semsg(_(e_listblobarg), "reverse()"); 2476 semsg(_(e_listblobarg), "reverse()");
2477 else if ((l = argvars[0].vval.v_list) != NULL 2477 else if ((l = argvars[0].vval.v_list) != NULL
2478 && !var_check_lock(l->lv_lock, 2478 && !value_check_lock(l->lv_lock,
2479 (char_u *)N_("reverse() argument"), TRUE)) 2479 (char_u *)N_("reverse() argument"), TRUE))
2480 { 2480 {
2481 if (l->lv_first == &range_list_item) 2481 if (l->lv_first == &range_list_item)
2482 { 2482 {
2483 varnumber_T new_start = l->lv_u.nonmat.lv_start 2483 varnumber_T new_start = l->lv_u.nonmat.lv_start