patch 8.2.1479: Vim9: error for list index uses wrong line number
Problem: Vim9: error for list index uses wrong line number.
Solution: Set source line number. (closes #6724) Add a way to assert the
line number of the error with assert_fails().
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index ee68537..0e6702d 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -1464,16 +1464,18 @@
4]
call CheckDefFailure(["let x = 1234[3]"], 'E1107:')
- call CheckDefExecFailure(["let x = g:anint[3]"], 'E1062:')
+ call CheckDefExecFailure(["let x = g:anint[3]"], 'E1062:', 1)
call CheckDefFailure(["let x = g:list_mixed[xxx]"], 'E1001:')
call CheckDefFailure(["let x = [1,2,3]"], 'E1069:')
call CheckDefFailure(["let x = [1 ,2, 3]"], 'E1068:')
- call CheckDefExecFailure(["let x = g:list_mixed['xx']"], 'E1029:')
+ call CheckDefExecFailure(["echo 1", "let x = [][0]", "echo 3"], 'E684:', 2)
+
+ call CheckDefExecFailure(["let x = g:list_mixed['xx']"], 'E1029:', 1)
call CheckDefFailure(["let x = g:list_mixed["], 'E1097:')
- call CheckDefFailure(["let x = g:list_mixed[0"], 'E1097:')
+ call CheckDefFailure(["let x = g:list_mixed[0"], 'E1097:', 1)
call CheckDefExecFailure(["let x = g:list_empty[3]"], 'E684:')
call CheckDefFailure(["let l: list<number> = [234, 'x']"], 'E1012:')
call CheckDefFailure(["let l: list<number> = ['x', 234]"], 'E1012:')
diff --git a/src/testdir/vim9.vim b/src/testdir/vim9.vim
index 448aa3d..c890b0c 100644
--- a/src/testdir/vim9.vim
+++ b/src/testdir/vim9.vim
@@ -9,17 +9,19 @@
endfunc
" Check that "lines" inside ":def" results in an "error" message.
-func CheckDefFailure(lines, error)
+" If "lnum" is given check that the error is reported for this line.
+func CheckDefFailure(lines, error, lnum = -1)
call writefile(['def Func()'] + a:lines + ['enddef', 'defcompile'], 'Xdef')
- call assert_fails('so Xdef', a:error, a:lines)
+ call assert_fails('so Xdef', a:error, a:lines, a:lnum)
call delete('Xdef')
endfunc
" Check that "lines" inside ":def" results in an "error" message when executed.
-func CheckDefExecFailure(lines, error)
+" If "lnum" is given check that the error is reported for this line.
+func CheckDefExecFailure(lines, error, lnum = -1)
call writefile(['def Func()'] + a:lines + ['enddef'], 'Xdef')
so Xdef
- call assert_fails('call Func()', a:error, a:lines)
+ call assert_fails('call Func()', a:error, a:lines, a:lnum)
call delete('Xdef')
endfunc