Mercurial > vim
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 |