0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.2.2760: Vim9: no error for changing a for loop variable

Problem:    Vim9: no error for changing a for loop variable.
Solution:   Make the loop variable read-only. (issue #8102)
This commit is contained in:
Bram Moolenaar
2021-04-13 21:48:03 +02:00
parent f2253963c2
commit f6a8d420a8
6 changed files with 41 additions and 12 deletions

View File

@@ -1351,7 +1351,8 @@ set_var_lval(
{
typval_T tv;
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
if ((flags & (ASSIGN_CONST | ASSIGN_FINAL))
&& (flags & ASSIGN_FOR_LOOP) == 0)
{
emsg(_(e_cannot_mod));
*endp = cc;
@@ -1390,7 +1391,8 @@ set_var_lval(
listitem_T *ll_li = lp->ll_li;
int ll_n1 = lp->ll_n1;
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
if ((flags & (ASSIGN_CONST | ASSIGN_FINAL))
&& (flags & ASSIGN_FOR_LOOP) == 0)
{
emsg(_("E996: Cannot lock a range"));
return;
@@ -1449,7 +1451,8 @@ set_var_lval(
/*
* Assign to a List or Dictionary item.
*/
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
if ((flags & (ASSIGN_CONST | ASSIGN_FINAL))
&& (flags & ASSIGN_FOR_LOOP) == 0)
{
emsg(_("E996: Cannot lock a list or dict"));
return;
@@ -1775,7 +1778,9 @@ next_for_item(void *fi_void, char_u *arg)
{
forinfo_T *fi = (forinfo_T *)fi_void;
int result;
int flag = in_vim9script() ? ASSIGN_DECL : 0;
int flag = ASSIGN_FOR_LOOP | (in_vim9script()
? (ASSIGN_FINAL | ASSIGN_DECL | ASSIGN_NO_MEMBER_TYPE)
: 0);
listitem_T *item;
if (fi->fi_blob != NULL)