patch 8.2.2194: Vim9: cannot use :const or :final at the script level
Problem: Vim9: cannot use :const or :final at the script level.
Solution: Support using :const and :final. (closes #7526)
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index bfc2d20..d5e1b33 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -1127,6 +1127,30 @@
const FOO: number = 123
assert_equal(123, FOO)
+ const FOOS = 'foos'
+ assert_equal('foos', FOOS)
+ final FLIST = [1]
+ assert_equal([1], FLIST)
+ FLIST[0] = 11
+ assert_equal([11], FLIST)
+
+ const g:FOO: number = 321
+ assert_equal(321, g:FOO)
+ const g:FOOS = 'gfoos'
+ assert_equal('gfoos', g:FOOS)
+ final g:FLIST = [2]
+ assert_equal([2], g:FLIST)
+ g:FLIST[0] = 22
+ assert_equal([22], g:FLIST)
+
+ const w:FOO: number = 46
+ assert_equal(46, w:FOO)
+ const w:FOOS = 'wfoos'
+ assert_equal('wfoos', w:FOOS)
+ final w:FLIST = [3]
+ assert_equal([3], w:FLIST)
+ w:FLIST[0] = 33
+ assert_equal([33], w:FLIST)
var s:other: number
other = 1234
@@ -1150,6 +1174,12 @@
unlet g:var_test
unlet g:var_prefixed
unlet g:other_var
+ unlet g:FOO
+ unlet g:FOOS
+ unlet g:FLIST
+ unlet w:FOO
+ unlet w:FOOS
+ unlet w:FLIST
enddef
def Test_var_declaration_fails()
@@ -1161,6 +1191,22 @@
lines =<< trim END
vim9script
+ const g:constvar = 'string'
+ g:constvar = 'xx'
+ END
+ CheckScriptFailure(lines, 'E741:')
+ unlet g:constvar
+
+ lines =<< trim END
+ vim9script
+ final w:finalvar = [9]
+ w:finalvar = [8]
+ END
+ CheckScriptFailure(lines, 'E1122:')
+ unlet w:finalvar
+
+ lines =<< trim END
+ vim9script
const var: string
END
CheckScriptFailure(lines, 'E1021:')
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index bdced02..749b8e8 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -1032,7 +1032,7 @@
call Change()
unlet g:Aconst
END
- CheckScriptFailure(lines, 'E741: Value is locked: Aconst', 2)
+ CheckScriptFailure(lines, 'E1122: Variable is locked: Aconst', 2)
enddef
" Test that inside :function a Python function can be defined, :def is not