changeset 23187:013aa8e2be8c v8.2.2139

patch 8.2.2139: Vim9: unreachable code in assignment Commit: https://github.com/vim/vim/commit/acbae18df528b6aee72ecfd66e344dc8be7b3775 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Dec 13 18:44:43 2020 +0100 patch 8.2.2139: Vim9: unreachable code in assignment Problem: Vim9: unreachable code in assignment. Solution: Don't check "new_local" when "has_index" is set. Add test for wrong type of list index.
author Bram Moolenaar <Bram@vim.org>
date Sun, 13 Dec 2020 18:45:16 +0100
parents 00583b0bedd5
children 1691f44472e0
files src/testdir/test_vim9_assign.vim src/version.c src/vim9compile.c
diffstat 3 files changed, 14 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -326,6 +326,18 @@ def Test_assign_index()
   END
   CheckDefFailure(lines, 'E1012: Type mismatch; expected number but got dict<unknown>', 3)
 
+  lines =<< trim END
+    var lines: list<string>
+    lines['a'] = 'asdf'
+  END
+  CheckDefFailure(lines, 'E39:', 2)
+
+  lines =<< trim END
+    var lines: string
+    lines[9] = 'asdf'
+  END
+  CheckDefFailure(lines, 'E1141:', 2)
+
   # list of dict
   var ld: list<dict<number>>
   ld[0] = {}
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2139,
+/**/
     2138,
 /**/
     2137,
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -5856,8 +5856,6 @@ compile_assignment(char_u *arg, exarg_T 
 	    int r;
 
 	    // Compile the "idx" in "var[idx]" or "key" in "var.key".
-	    if (new_local)
-		--cctx->ctx_locals.ga_len;
 	    p = var_start + varlen;
 	    if (*p == '[')
 	    {
@@ -5877,8 +5875,6 @@ compile_assignment(char_u *arg, exarg_T 
 
 		r = generate_PUSHS(cctx, key);
 	    }
-	    if (new_local)
-		++cctx->ctx_locals.ga_len;
 	    if (r == FAIL)
 		goto theend;