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;