patch 8.2.1518: Vim9: cannot assign to local option
Problem: Vim9: cannot assign to local option.
Solution: Skip over "&l:" and "&g:". (closes #6749)
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 6417d21..45384d1 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -110,12 +110,21 @@
endif
lines =<< trim END
- vim9script
&ts = 6
&ts += 3
assert_equal(9, &ts)
+
+ &l:ts = 6
+ assert_equal(6, &ts)
+ &l:ts += 2
+ assert_equal(8, &ts)
+
+ &g:ts = 6
+ assert_equal(6, &g:ts)
+ &g:ts += 2
+ assert_equal(8, &g:ts)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
CheckDefFailure(['¬ex += 3'], 'E113:')
CheckDefFailure(['&ts ..= "xxx"'], 'E1019:')
@@ -163,19 +172,15 @@
call CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1051:')
call CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1012:')
- @a = 'areg'
- @a ..= 'add'
- assert_equal('aregadd', @a)
- call CheckDefFailure(['@a += "more"'], 'E1051:')
- call CheckDefFailure(['@a += 123'], 'E1012:')
-
lines =<< trim END
- vim9script
@c = 'areg'
@c ..= 'add'
assert_equal('aregadd', @c)
END
- call CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
+
+ call CheckDefFailure(['@a += "more"'], 'E1051:')
+ call CheckDefFailure(['@a += 123'], 'E1012:')
v:errmsg = 'none'
v:errmsg ..= 'again'
diff --git a/src/testdir/vim9.vim b/src/testdir/vim9.vim
index 2f92cf9..7fbe4a5 100644
--- a/src/testdir/vim9.vim
+++ b/src/testdir/vim9.vim
@@ -41,6 +41,11 @@
delete('Xdef')
enddef
+def CheckDefAndScriptSuccess(lines: list<string>)
+ CheckDefSuccess(lines)
+ CheckScriptSuccess(['vim9script'] + lines)
+enddef
+
" Check that a command fails both when used in a :def function and when used
" in Vim9 script.
def CheckScriptAndDefFailure(lines: list<string>, error: string, lnum = -3)