Mercurial > vim
comparison src/eval.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 | eb1f5f618c75 |
children | a4866826cebc |
comparison
equal
deleted
inserted
replaced
22297:3d2dc70119a7 | 22298:07e48ee8c3bb |
---|---|
1053 p = NULL; | 1053 p = NULL; |
1054 break; | 1054 break; |
1055 } | 1055 } |
1056 // existing variable, need to check if it can be changed | 1056 // existing variable, need to check if it can be changed |
1057 else if ((flags & GLV_READ_ONLY) == 0 | 1057 else if ((flags & GLV_READ_ONLY) == 0 |
1058 && var_check_ro(lp->ll_di->di_flags, name, FALSE)) | 1058 && (var_check_ro(lp->ll_di->di_flags, name, FALSE) |
1059 || var_check_lock(lp->ll_di->di_flags, name, FALSE))) | |
1059 { | 1060 { |
1060 clear_tv(&var1); | 1061 clear_tv(&var1); |
1061 return NULL; | 1062 return NULL; |
1062 } | 1063 } |
1063 | 1064 |
1218 if (op != NULL && *op != '=') | 1219 if (op != NULL && *op != '=') |
1219 { | 1220 { |
1220 semsg(_(e_letwrong), op); | 1221 semsg(_(e_letwrong), op); |
1221 return; | 1222 return; |
1222 } | 1223 } |
1223 if (var_check_lock(lp->ll_blob->bv_lock, lp->ll_name, FALSE)) | 1224 if (value_check_lock(lp->ll_blob->bv_lock, lp->ll_name, FALSE)) |
1224 return; | 1225 return; |
1225 | 1226 |
1226 if (lp->ll_range && rettv->v_type == VAR_BLOB) | 1227 if (lp->ll_range && rettv->v_type == VAR_BLOB) |
1227 { | 1228 { |
1228 int il, ir; | 1229 int il, ir; |
1295 return; | 1296 return; |
1296 set_var_const(lp->ll_name, lp->ll_type, rettv, copy, flags); | 1297 set_var_const(lp->ll_name, lp->ll_type, rettv, copy, flags); |
1297 } | 1298 } |
1298 *endp = cc; | 1299 *endp = cc; |
1299 } | 1300 } |
1300 else if (var_check_lock(lp->ll_newkey == NULL | 1301 else if (value_check_lock(lp->ll_newkey == NULL |
1301 ? lp->ll_tv->v_lock | 1302 ? lp->ll_tv->v_lock |
1302 : lp->ll_tv->vval.v_dict->dv_lock, lp->ll_name, FALSE)) | 1303 : lp->ll_tv->vval.v_dict->dv_lock, lp->ll_name, FALSE)) |
1303 ; | 1304 ; |
1304 else if (lp->ll_range) | 1305 else if (lp->ll_range) |
1305 { | 1306 { |
1315 /* | 1316 /* |
1316 * Check whether any of the list items is locked | 1317 * Check whether any of the list items is locked |
1317 */ | 1318 */ |
1318 for (ri = rettv->vval.v_list->lv_first; ri != NULL && ll_li != NULL; ) | 1319 for (ri = rettv->vval.v_list->lv_first; ri != NULL && ll_li != NULL; ) |
1319 { | 1320 { |
1320 if (var_check_lock(ll_li->li_tv.v_lock, lp->ll_name, FALSE)) | 1321 if (value_check_lock(ll_li->li_tv.v_lock, lp->ll_name, FALSE)) |
1321 return; | 1322 return; |
1322 ri = ri->li_next; | 1323 ri = ri->li_next; |
1323 if (ri == NULL || (!lp->ll_empty2 && lp->ll_n2 == ll_n1)) | 1324 if (ri == NULL || (!lp->ll_empty2 && lp->ll_n2 == ll_n1)) |
1324 break; | 1325 break; |
1325 ll_li = ll_li->li_next; | 1326 ll_li = ll_li->li_next; |