]> granicus.if.org Git - vim/commitdiff
patch 8.2.1502: Vim9: can use += with a :let command at script level v8.2.1502
authorBram Moolenaar <Bram@vim.org>
Fri, 21 Aug 2020 19:32:50 +0000 (21:32 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 21 Aug 2020 19:32:50 +0000 (21:32 +0200)
Problem:    Vim9: can use += with a :let command at script level.
Solution:   Give an error.

src/evalvars.c
src/testdir/test_vim9_expr.vim
src/testdir/test_vim9_script.vim
src/version.c

index bff6086e53781a2e0a5fbf2229dad7e5b4cb1620..335f850bf7ffeed1dffe234f2a57bf05c4c4461c 100644 (file)
@@ -786,7 +786,13 @@ ex_let(exarg_T *eap)
            op[1] = NUL;
            if (*expr != '=')
            {
-               if (vim_strchr((char_u *)"+-*/%.", *expr) != NULL)
+               if (vim9script && (flags & LET_NO_COMMAND) == 0)
+               {
+                   // +=, /=, etc. require an existing variable
+                   semsg(_(e_cannot_use_operator_on_new_variable), eap->arg);
+                   i = FAIL;
+               }
+               else if (vim_strchr((char_u *)"+-*/%.", *expr) != NULL)
                {
                    op[0] = *expr;   // +=, -=, *=, /=, %= or .=
                    ++len;
index 312eddfaeb26256934fb861029b3a73454362be2..911f4ea89fe6898dce2514ce2ff415a4ad64046c 100644 (file)
@@ -1682,8 +1682,6 @@ def Test_expr7_dict()
   call CheckDefFailure(["let x = {xxx: 8}"], 'E1001:', 1)
   call CheckDefFailure(["let x = #{a: 1, a: 2}"], 'E721:', 1)
   call CheckDefFailure(["let x = #"], 'E1015:', 1)
-  call CheckDefFailure(["let x += 1"], 'E1020:', 1)
-  call CheckDefFailure(["let x = x + 1"], 'E1001:', 1)
   call CheckDefExecFailure(["let x = g:anint.member"], 'E715:', 1)
   call CheckDefExecFailure(["let x = g:dict_empty.member"], 'E716:', 1)
 
index e8f07069c25a8e43e33ae41c7ac1ceb24e65e483..91867f2202d39d5e48d2e3404baf9fd2f9da5066 100644 (file)
@@ -569,7 +569,10 @@ def Test_assignment_failure()
   call CheckDefFailure(['let t:var = 5'], 'E1016: Cannot declare a tab variable:')
 
   call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:')
-  call CheckDefFailure(['let xnr += 4'], 'E1020:')
+  call CheckDefFailure(['let xnr += 4'], 'E1020:', 1)
+  call CheckScriptFailure(['vim9script', 'let xnr += 4'], 'E1020:')
+  call CheckDefFailure(["let xnr = xnr + 1"], 'E1001:', 1)
+  call CheckScriptFailure(['vim9script', 'let xnr = xnr + 4'], 'E121:')
 
   call CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef', 'defcompile'], 'E1108:')
 
index 4e7b9ad1aa232fa594dbe63d11756d730f043c9b..62692b82fbde6790b837220741f0fc477bf8f048 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1502,
 /**/
     1501,
 /**/