changeset 19451:b26e96f7c12f v8.2.0283

patch 8.2.0283: Vim9: failing to load script var not tested Commit: https://github.com/vim/vim/commit/fd1823e0b783c31a5022c7a4d31c34d84ff0a744 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Feb 19 20:23:11 2020 +0100 patch 8.2.0283: Vim9: failing to load script var not tested Problem: Vim9: failing to load script var not tested. Solution: Add more tests. Fix using s: in old script.
author Bram Moolenaar <Bram@vim.org>
date Wed, 19 Feb 2020 20:30:04 +0100
parents 260de9ec24d0
children 6321a1960758
files src/testdir/test_vim9_expr.vim src/testdir/test_vim9_script.vim src/version.c src/vim9compile.c
diffstat 4 files changed, 14 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -726,6 +726,9 @@ func Test_expr7_fails()
 
   call CheckDefFailure("let x = &notexist", 'E113:')
   call CheckDefExecFailure("&grepprg = [343]", 'E1051:')
+
+  call CheckDefExecFailure("echo s:doesnt_exist", 'E121:')
+  call CheckDefExecFailure("echo g:doesnt_exist", 'E121:')
 endfunc
 
 let g:Funcrefs = [function('add')]
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -61,10 +61,10 @@ def Test_assignment()
   assert_equal('foobar', $ENVVAR)
   $ENVVAR = ''
 
-  appendToMe ..= 'yyy'
-  assert_equal('xxxyyy', appendToMe)
-  addToMe += 222
-  assert_equal(333, addToMe)
+  s:appendToMe ..= 'yyy'
+  assert_equal('xxxyyy', s:appendToMe)
+  s:addToMe += 222
+  assert_equal(333, s:addToMe)
 enddef
 
 func Test_assignment_failure()
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    283,
+/**/
     282,
 /**/
     281,
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -1513,9 +1513,9 @@ compile_load_scriptvar(cctx_T *cctx, cha
     int		    idx = get_script_item_idx(current_sctx.sc_sid, name, FALSE);
     imported_T	    *import;
 
-    if (idx == -1)
+    if (idx == -1 || si->sn_version != SCRIPT_VERSION_VIM9)
     {
-	// variable exists but is not in sn_var_vals: old style script.
+	// variable is not in sn_var_vals: old style script.
 	return generate_OLDSCRIPT(cctx, ISN_LOADS, name, current_sctx.sc_sid,
 								       &t_any);
     }
@@ -1627,7 +1627,9 @@ compile_load(char_u **arg, char_u *end, 
 			|| (len == 5 && STRNCMP("false", *arg, 5) == 0))
 		    res = generate_PUSHBOOL(cctx, **arg == 't'
 						     ? VVAL_TRUE : VVAL_FALSE);
-		else
+		else if (SCRIPT_ITEM(current_sctx.sc_sid)->sn_version
+							== SCRIPT_VERSION_VIM9)
+		    // in Vim9 script "var" can be script-local.
 		   res = compile_load_scriptvar(cctx, name);
 	    }
 	}