Patch 8.2.1481
Problem:    Vim9: line number reported with error may be wrong.
Solution:   Check line number in tests.
Files:      src/testdir/test_vim9_expr.vim, src/testdir/vim9.vim,
            src/vim9execute.c


*** ../vim-8.2.1480/src/testdir/test_vim9_expr.vim      2020-08-18 
13:41:47.215350419 +0200
--- src/testdir/test_vim9_expr.vim      2020-08-18 20:32:31.290745224 +0200
***************
*** 93,141 ****
        vim9script
        let var = v:true?1:2
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
        vim9script
        let var = v:true? 1 : 2
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
        vim9script
        let var = v:true ?1 : 2
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
        vim9script
        let var = v:true ? 1: 2
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
        vim9script
        let var = v:true ? 1 :2
    END
!   CheckScriptFailure(lines, 'E1004:')
  enddef
  
  func Test_expr1_fails()
!   call CheckDefFailure(["let x = 1 ? 'one'"], "Missing ':' after '?'")
!   call CheckDefFailure(["let x = 1 ? 'one' : xxx"], "E1001:")
  
    let msg = "white space required before and after '?'"
!   call CheckDefFailure(["let x = 1? 'one' : 'two'"], msg)
!   call CheckDefFailure(["let x = 1 ?'one' : 'two'"], msg)
!   call CheckDefFailure(["let x = 1?'one' : 'two'"], msg)
  
    let msg = "white space required before and after ':'"
!   call CheckDefFailure(["let x = 1 ? 'one': 'two'"], msg)
!   call CheckDefFailure(["let x = 1 ? 'one' :'two'"], msg)
!   call CheckDefFailure(["let x = 1 ? 'one':'two'"], msg)
  
    " missing argument detected even when common type is used
    call CheckDefFailure([
        \ 'let X = FuncOne',
        \ 'let Y = FuncTwo',
        \ 'let Z = g:cond ? FuncOne : FuncTwo',
!       \ 'Z()'], 'E119:')
  endfunc
  
  " TODO: define inside test function
--- 93,141 ----
        vim9script
        let var = v:true?1:2
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
        let var = v:true? 1 : 2
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
        let var = v:true ?1 : 2
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
        let var = v:true ? 1: 2
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
        let var = v:true ? 1 :2
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
  enddef
  
  func Test_expr1_fails()
!   call CheckDefFailure(["let x = 1 ? 'one'"], "Missing ':' after '?'", 1)
!   call CheckDefFailure(["let x = 1 ? 'one' : xxx"], "E1001:", 1)
  
    let msg = "white space required before and after '?'"
!   call CheckDefFailure(["let x = 1? 'one' : 'two'"], msg, 1)
!   call CheckDefFailure(["let x = 1 ?'one' : 'two'"], msg, 1)
!   call CheckDefFailure(["let x = 1?'one' : 'two'"], msg, 1)
  
    let msg = "white space required before and after ':'"
!   call CheckDefFailure(["let x = 1 ? 'one': 'two'"], msg, 1)
!   call CheckDefFailure(["let x = 1 ? 'one' :'two'"], msg, 1)
!   call CheckDefFailure(["let x = 1 ? 'one':'two'"], msg, 1)
  
    " missing argument detected even when common type is used
    call CheckDefFailure([
        \ 'let X = FuncOne',
        \ 'let Y = FuncTwo',
        \ 'let Z = g:cond ? FuncOne : FuncTwo',
!       \ 'Z()'], 'E119:', 4)
  endfunc
  
  " TODO: define inside test function
***************
*** 207,223 ****
        vim9script
        let var = v:true||v:true
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
        vim9script
        let var = v:true ||v:true
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
        vim9script
        let var = v:true|| v:true
    END
!   CheckScriptFailure(lines, 'E1004:')
  
    # check keeping the value
    lines =<< trim END
--- 207,223 ----
        vim9script
        let var = v:true||v:true
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
        let var = v:true ||v:true
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
        let var = v:true|| v:true
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
  
    # check keeping the value
    lines =<< trim END
***************
*** 254,264 ****
  
  func Test_expr2_fails()
    let msg = "white space required before and after '||'"
!   call CheckDefFailure(["let x = 1||2"], msg)
!   call CheckDefFailure(["let x = 1 ||2"], msg)
!   call CheckDefFailure(["let x = 1|| 2"], msg)
  
!   call CheckDefFailure(["let x = 1 || xxx"], 'E1001:')
  endfunc
  
  " test &&
--- 254,264 ----
  
  func Test_expr2_fails()
    let msg = "white space required before and after '||'"
!   call CheckDefFailure(["let x = 1||2"], msg, 1)
!   call CheckDefFailure(["let x = 1 ||2"], msg, 1)
!   call CheckDefFailure(["let x = 1|| 2"], msg, 1)
  
!   call CheckDefFailure(["let x = 1 || xxx"], 'E1001:', 1)
  endfunc
  
  " test &&
***************
*** 328,344 ****
        vim9script
        let var = v:true&&v:true
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
        vim9script
        let var = v:true &&v:true
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
        vim9script
        let var = v:true&& v:true
    END
!   CheckScriptFailure(lines, 'E1004:')
  
    # check keeping the value
    lines =<< trim END
--- 328,344 ----
        vim9script
        let var = v:true&&v:true
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
        let var = v:true &&v:true
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
        let var = v:true&& v:true
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
  
    # check keeping the value
    lines =<< trim END
***************
*** 379,387 ****
  
  func Test_expr3_fails()
    let msg = "white space required before and after '&&'"
!   call CheckDefFailure(["let x = 1&&2"], msg)
!   call CheckDefFailure(["let x = 1 &&2"], msg)
!   call CheckDefFailure(["let x = 1&& 2"], msg)
  endfunc
  
  " global variables to use for tests with the "any" type
--- 379,387 ----
  
  func Test_expr3_fails()
    let msg = "white space required before and after '&&'"
!   call CheckDefFailure(["let x = 1&&2"], msg, 1)
!   call CheckDefFailure(["let x = 1 &&2"], msg, 1)
!   call CheckDefFailure(["let x = 1&& 2"], msg, 1)
  endfunc
  
  " global variables to use for tests with the "any" type
***************
*** 457,463 ****
    assert_equal(false, 'abc' ==# 'ABC')
    set noignorecase
  
!   call CheckDefFailure(["let x = 'a' == xxx"], 'E1001:')
  
    let bb = 0z3f
    assert_equal(true, 0z3f == bb)
--- 457,463 ----
    assert_equal(false, 'abc' ==# 'ABC')
    set noignorecase
  
!   call CheckDefFailure(["let x = 'a' == xxx"], 'E1001:', 1)
  
    let bb = 0z3f
    assert_equal(true, 0z3f == bb)
***************
*** 757,775 ****
        vim9script
        echo '' == 0
    END
!   CheckScriptFailure(lines, 'E1072:')
  
    lines =<< trim END
        vim9script
        echo v:true > v:false
    END
!   CheckScriptFailure(lines, 'Cannot compare bool with bool')
  
    lines =<< trim END
        vim9script
        echo 123 is 123
    END
!   CheckScriptFailure(lines, 'Cannot use "is" with number')
  
    # check 'ignorecase' not being used
    lines =<< trim END
--- 757,775 ----
        vim9script
        echo '' == 0
    END
!   CheckScriptFailure(lines, 'E1072:', 2)
  
    lines =<< trim END
        vim9script
        echo v:true > v:false
    END
!   CheckScriptFailure(lines, 'Cannot compare bool with bool', 2)
  
    lines =<< trim END
        vim9script
        echo 123 is 123
    END
!   CheckScriptFailure(lines, 'Cannot use "is" with number', 2)
  
    # check 'ignorecase' not being used
    lines =<< trim END
***************
*** 795,826 ****
      vim9script
      echo 2>3
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
      vim9script
      echo 2 >3
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
      vim9script
      echo 2> 3
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
      vim9script
      echo 2!=3
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
      vim9script
      echo 2 !=3
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
      vim9script
      echo 2!= 3
    END
!   CheckScriptFailure(lines, 'E1004:')
  
    lines =<< trim END
      vim9script
--- 795,826 ----
      vim9script
      echo 2>3
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
      vim9script
      echo 2 >3
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
      vim9script
      echo 2> 3
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
      vim9script
      echo 2!=3
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
      vim9script
      echo 2 !=3
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
      vim9script
      echo 2!= 3
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
  
    lines =<< trim END
      vim9script
***************
*** 838,908 ****
  
  func Test_expr4_fails()
    let msg = "white space required before and after '>'"
!   call CheckDefFailure(["let x = 1>2"], msg)
!   call CheckDefFailure(["let x = 1 >2"], msg)
!   call CheckDefFailure(["let x = 1> 2"], msg)
  
    let msg = "white space required before and after '=='"
!   call CheckDefFailure(["let x = 1==2"], msg)
!   call CheckDefFailure(["let x = 1 ==2"], msg)
!   call CheckDefFailure(["let x = 1== 2"], msg)
  
    let msg = "white space required before and after 'is'"
!   call CheckDefFailure(["let x = '1'is'2'"], msg)
!   call CheckDefFailure(["let x = '1' is'2'"], msg)
!   call CheckDefFailure(["let x = '1'is '2'"], msg)
  
    let msg = "white space required before and after 'isnot'"
!   call CheckDefFailure(["let x = '1'isnot'2'"], msg)
!   call CheckDefFailure(["let x = '1' isnot'2'"], msg)
!   call CheckDefFailure(["let x = '1'isnot '2'"], msg)
! 
!   call CheckDefFailure(["let x = 1 is# 2"], 'E15:')
!   call CheckDefFailure(["let x = 1 is? 2"], 'E15:')
!   call CheckDefFailure(["let x = 1 isnot# 2"], 'E15:')
!   call CheckDefFailure(["let x = 1 isnot? 2"], 'E15:')
! 
!   call CheckDefFailure(["let x = 1 == '2'"], 'Cannot compare number with 
string')
!   call CheckDefFailure(["let x = '1' == 2"], 'Cannot compare string with 
number')
!   call CheckDefFailure(["let x = 1 == RetVoid()"], 'Cannot compare number 
with void')
!   call CheckDefFailure(["let x = RetVoid() == 1"], 'Cannot compare void with 
number')
! 
!   call CheckDefFailure(["let x = true > false"], 'Cannot compare bool with 
bool')
!   call CheckDefFailure(["let x = true >= false"], 'Cannot compare bool with 
bool')
!   call CheckDefFailure(["let x = true < false"], 'Cannot compare bool with 
bool')
!   call CheckDefFailure(["let x = true <= false"], 'Cannot compare bool with 
bool')
!   call CheckDefFailure(["let x = true =~ false"], 'Cannot compare bool with 
bool')
!   call CheckDefFailure(["let x = true !~ false"], 'Cannot compare bool with 
bool')
!   call CheckDefFailure(["let x = true is false"], 'Cannot use "is" with bool')
!   call CheckDefFailure(["let x = true isnot false"], 'Cannot use "isnot" with 
bool')
! 
!   call CheckDefFailure(["let x = v:none is v:null"], 'Cannot use "is" with 
special')
!   call CheckDefFailure(["let x = v:none isnot v:null"], 'Cannot use "isnot" 
with special')
!   call CheckDefFailure(["let x = 123 is 123"], 'Cannot use "is" with number')
!   call CheckDefFailure(["let x = 123 isnot 123"], 'Cannot use "isnot" with 
number')
    if has('float')
!     call CheckDefFailure(["let x = 1.3 is 1.3"], 'Cannot use "is" with float')
!     call CheckDefFailure(["let x = 1.3 isnot 1.3"], 'Cannot use "isnot" with 
float')
    endif
  
!   call CheckDefFailure(["let x = 0za1 > 0z34"], 'Cannot compare blob with 
blob')
!   call CheckDefFailure(["let x = 0za1 >= 0z34"], 'Cannot compare blob with 
blob')
!   call CheckDefFailure(["let x = 0za1 < 0z34"], 'Cannot compare blob with 
blob')
!   call CheckDefFailure(["let x = 0za1 <= 0z34"], 'Cannot compare blob with 
blob')
!   call CheckDefFailure(["let x = 0za1 =~ 0z34"], 'Cannot compare blob with 
blob')
!   call CheckDefFailure(["let x = 0za1 !~ 0z34"], 'Cannot compare blob with 
blob')
! 
!   call CheckDefFailure(["let x = [13] > [88]"], 'Cannot compare list with 
list')
!   call CheckDefFailure(["let x = [13] >= [88]"], 'Cannot compare list with 
list')
!   call CheckDefFailure(["let x = [13] < [88]"], 'Cannot compare list with 
list')
!   call CheckDefFailure(["let x = [13] <= [88]"], 'Cannot compare list with 
list')
!   call CheckDefFailure(["let x = [13] =~ [88]"], 'Cannot compare list with 
list')
!   call CheckDefFailure(["let x = [13] !~ [88]"], 'Cannot compare list with 
list')
! 
!   call CheckDefFailure(['let j: job', 'let chan: channel', 'let r = j == 
chan'], 'Cannot compare job with channel')
!   call CheckDefFailure(['let j: job', 'let x: list<any>', 'let r = j == x'], 
'Cannot compare job with list')
!   call CheckDefFailure(['let j: job', 'let Xx: func', 'let r = j == Xx'], 
'Cannot compare job with func')
!   call CheckDefFailure(['let j: job', 'let Xx: func', 'let r = j == Xx'], 
'Cannot compare job with func')
  endfunc
  
  " test addition, subtraction, concatenation
--- 838,908 ----
  
  func Test_expr4_fails()
    let msg = "white space required before and after '>'"
!   call CheckDefFailure(["let x = 1>2"], msg, 1)
!   call CheckDefFailure(["let x = 1 >2"], msg, 1)
!   call CheckDefFailure(["let x = 1> 2"], msg, 1)
  
    let msg = "white space required before and after '=='"
!   call CheckDefFailure(["let x = 1==2"], msg, 1)
!   call CheckDefFailure(["let x = 1 ==2"], msg, 1)
!   call CheckDefFailure(["let x = 1== 2"], msg, 1)
  
    let msg = "white space required before and after 'is'"
!   call CheckDefFailure(["let x = '1'is'2'"], msg, 1)
!   call CheckDefFailure(["let x = '1' is'2'"], msg, 1)
!   call CheckDefFailure(["let x = '1'is '2'"], msg, 1)
  
    let msg = "white space required before and after 'isnot'"
!   call CheckDefFailure(["let x = '1'isnot'2'"], msg, 1)
!   call CheckDefFailure(["let x = '1' isnot'2'"], msg, 1)
!   call CheckDefFailure(["let x = '1'isnot '2'"], msg, 1)
! 
!   call CheckDefFailure(["let x = 1 is# 2"], 'E15:', 1)
!   call CheckDefFailure(["let x = 1 is? 2"], 'E15:', 1)
!   call CheckDefFailure(["let x = 1 isnot# 2"], 'E15:', 1)
!   call CheckDefFailure(["let x = 1 isnot? 2"], 'E15:', 1)
! 
!   call CheckDefFailure(["let x = 1 == '2'"], 'Cannot compare number with 
string', 1)
!   call CheckDefFailure(["let x = '1' == 2"], 'Cannot compare string with 
number', 1)
!   call CheckDefFailure(["let x = 1 == RetVoid()"], 'Cannot compare number 
with void', 1)
!   call CheckDefFailure(["let x = RetVoid() == 1"], 'Cannot compare void with 
number', 1)
! 
!   call CheckDefFailure(["let x = true > false"], 'Cannot compare bool with 
bool', 1)
!   call CheckDefFailure(["let x = true >= false"], 'Cannot compare bool with 
bool', 1)
!   call CheckDefFailure(["let x = true < false"], 'Cannot compare bool with 
bool', 1)
!   call CheckDefFailure(["let x = true <= false"], 'Cannot compare bool with 
bool', 1)
!   call CheckDefFailure(["let x = true =~ false"], 'Cannot compare bool with 
bool', 1)
!   call CheckDefFailure(["let x = true !~ false"], 'Cannot compare bool with 
bool', 1)
!   call CheckDefFailure(["let x = true is false"], 'Cannot use "is" with 
bool', 1)
!   call CheckDefFailure(["let x = true isnot false"], 'Cannot use "isnot" with 
bool', 1)
! 
!   call CheckDefFailure(["let x = v:none is v:null"], 'Cannot use "is" with 
special', 1)
!   call CheckDefFailure(["let x = v:none isnot v:null"], 'Cannot use "isnot" 
with special', 1)
!   call CheckDefFailure(["let x = 123 is 123"], 'Cannot use "is" with number', 
1)
!   call CheckDefFailure(["let x = 123 isnot 123"], 'Cannot use "isnot" with 
number', 1)
    if has('float')
!     call CheckDefFailure(["let x = 1.3 is 1.3"], 'Cannot use "is" with 
float', 1)
!     call CheckDefFailure(["let x = 1.3 isnot 1.3"], 'Cannot use "isnot" with 
float', 1)
    endif
  
!   call CheckDefFailure(["let x = 0za1 > 0z34"], 'Cannot compare blob with 
blob', 1)
!   call CheckDefFailure(["let x = 0za1 >= 0z34"], 'Cannot compare blob with 
blob', 1)
!   call CheckDefFailure(["let x = 0za1 < 0z34"], 'Cannot compare blob with 
blob', 1)
!   call CheckDefFailure(["let x = 0za1 <= 0z34"], 'Cannot compare blob with 
blob', 1)
!   call CheckDefFailure(["let x = 0za1 =~ 0z34"], 'Cannot compare blob with 
blob', 1)
!   call CheckDefFailure(["let x = 0za1 !~ 0z34"], 'Cannot compare blob with 
blob', 1)
! 
!   call CheckDefFailure(["let x = [13] > [88]"], 'Cannot compare list with 
list', 1)
!   call CheckDefFailure(["let x = [13] >= [88]"], 'Cannot compare list with 
list', 1)
!   call CheckDefFailure(["let x = [13] < [88]"], 'Cannot compare list with 
list', 1)
!   call CheckDefFailure(["let x = [13] <= [88]"], 'Cannot compare list with 
list', 1)
!   call CheckDefFailure(["let x = [13] =~ [88]"], 'Cannot compare list with 
list', 1)
!   call CheckDefFailure(["let x = [13] !~ [88]"], 'Cannot compare list with 
list', 1)
! 
!   call CheckDefFailure(['let j: job', 'let chan: channel', 'let r = j == 
chan'], 'Cannot compare job with channel', 3)
!   call CheckDefFailure(['let j: job', 'let x: list<any>', 'let r = j == x'], 
'Cannot compare job with list', 3)
!   call CheckDefFailure(['let j: job', 'let Xx: func', 'let r = j == Xx'], 
'Cannot compare job with func', 3)
!   call CheckDefFailure(['let j: job', 'let Xx: func', 'let r = j == Xx'], 
'Cannot compare job with func', 3)
  endfunc
  
  " test addition, subtraction, concatenation
***************
*** 978,1035 ****
        vim9script
        echo 'abc' is# 'abc'
    END
!   CheckScriptFailure(lines, 'E15:')
  
    lines =<< trim END
        vim9script
        echo 'abc' is? 'abc'
    END
!   CheckScriptFailure(lines, 'E15:')
  
    lines =<< trim END
        vim9script
        echo 'abc' isnot# 'abc'
    END
!   CheckScriptFailure(lines, 'E15:')
  
    lines =<< trim END
        vim9script
        echo 'abc' isnot? 'abc'
    END
!   CheckScriptFailure(lines, 'E15:')
  
    # check white space
    lines =<< trim END
        vim9script
        echo 5+6
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
        vim9script
        echo 5 +6
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
        vim9script
        echo 5+ 6
    END
!   CheckScriptFailure(lines, 'E1004:')
  
    lines =<< trim END
        vim9script
        echo 'a'..'b'
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
        vim9script
        echo 'a' ..'b'
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
        vim9script
        echo 'a'.. 'b'
    END
!   CheckScriptFailure(lines, 'E1004:')
  
    # check valid string concatenation
    lines =<< trim END
--- 978,1035 ----
        vim9script
        echo 'abc' is# 'abc'
    END
!   CheckScriptFailure(lines, 'E15:', 2)
  
    lines =<< trim END
        vim9script
        echo 'abc' is? 'abc'
    END
!   CheckScriptFailure(lines, 'E15:', 2)
  
    lines =<< trim END
        vim9script
        echo 'abc' isnot# 'abc'
    END
!   CheckScriptFailure(lines, 'E15:', 2)
  
    lines =<< trim END
        vim9script
        echo 'abc' isnot? 'abc'
    END
!   CheckScriptFailure(lines, 'E15:', 2)
  
    # check white space
    lines =<< trim END
        vim9script
        echo 5+6
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
        echo 5 +6
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
        echo 5+ 6
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
  
    lines =<< trim END
        vim9script
        echo 'a'..'b'
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
        echo 'a' ..'b'
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
        echo 'a'.. 'b'
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
  
    # check valid string concatenation
    lines =<< trim END
***************
*** 1049,1085 ****
        vim9script
        echo 'a' .. [1]
    END
!   CheckScriptFailure(lines, 'E730:')
    lines =<< trim END
        vim9script
        echo 'a' .. #{a: 1}
    END
!   CheckScriptFailure(lines, 'E731:')
    lines =<< trim END
        vim9script
        echo 'a' .. test_void()
    END
!   CheckScriptFailure(lines, 'E908:')
    lines =<< trim END
        vim9script
        echo 'a' .. 0z33
    END
!   CheckScriptFailure(lines, 'E976:')
    lines =<< trim END
        vim9script
        echo 'a' .. function('len')
    END
!   CheckScriptFailure(lines, 'E729:')
    lines =<< trim END
        vim9script
        echo 'a' .. test_null_job()
    END
!   CheckScriptFailure(lines, 'E908:')
    lines =<< trim END
        vim9script
        echo 'a' .. test_null_channel()
    END
!   CheckScriptFailure(lines, 'E908:')
  enddef
  
  def Test_expr5_float()
--- 1049,1085 ----
        vim9script
        echo 'a' .. [1]
    END
!   CheckScriptFailure(lines, 'E730:', 2)
    lines =<< trim END
        vim9script
        echo 'a' .. #{a: 1}
    END
!   CheckScriptFailure(lines, 'E731:', 2)
    lines =<< trim END
        vim9script
        echo 'a' .. test_void()
    END
!   CheckScriptFailure(lines, 'E908:', 2)
    lines =<< trim END
        vim9script
        echo 'a' .. 0z33
    END
!   CheckScriptFailure(lines, 'E976:', 2)
    lines =<< trim END
        vim9script
        echo 'a' .. function('len')
    END
!   CheckScriptFailure(lines, 'E729:', 2)
    lines =<< trim END
        vim9script
        echo 'a' .. test_null_job()
    END
!   CheckScriptFailure(lines, 'E908:', 2)
    lines =<< trim END
        vim9script
        echo 'a' .. test_null_channel()
    END
!   CheckScriptFailure(lines, 'E908:', 2)
  enddef
  
  def Test_expr5_float()
***************
*** 1109,1144 ****
  
  func Test_expr5_fails()
    let msg = "white space required before and after '+'"
!   call CheckDefFailure(["let x = 1+2"], msg)
!   call CheckDefFailure(["let x = 1 +2"], msg)
!   call CheckDefFailure(["let x = 1+ 2"], msg)
  
    let msg = "white space required before and after '-'"
!   call CheckDefFailure(["let x = 1-2"], msg)
!   call CheckDefFailure(["let x = 1 -2"], msg)
!   call CheckDefFailure(["let x = 1- 2"], msg)
  
    let msg = "white space required before and after '..'"
!   call CheckDefFailure(["let x = '1'..'2'"], msg)
!   call CheckDefFailure(["let x = '1' ..'2'"], msg)
!   call CheckDefFailure(["let x = '1'.. '2'"], msg)
! 
!   call CheckDefFailure(["let x = 0z1122 + 33"], 'E1051')
!   call CheckDefFailure(["let x = 0z1122 + [3]"], 'E1051')
!   call CheckDefFailure(["let x = 0z1122 + 'asd'"], 'E1051')
!   call CheckDefFailure(["let x = 33 + 0z1122"], 'E1051')
!   call CheckDefFailure(["let x = [3] + 0z1122"], 'E1051')
!   call CheckDefFailure(["let x = 'asdf' + 0z1122"], 'E1051')
!   call CheckDefFailure(["let x = 6 + xxx"], 'E1001')
! 
!   call CheckDefFailure(["let x = 'a' .. [1]"], 'E1105')
!   call CheckDefFailure(["let x = 'a' .. #{a: 1}"], 'E1105')
!   call CheckDefFailure(["let x = 'a' .. test_void()"], 'E1105')
!   call CheckDefFailure(["let x = 'a' .. 0z32"], 'E1105')
!   call CheckDefFailure(["let x = 'a' .. function('len')"], 'E1105')
!   call CheckDefFailure(["let x = 'a' .. function('len', ['a'])"], 'E1105')
!   call CheckDefFailure(["let x = 'a' .. test_null_job()"], 'E1105')
!   call CheckDefFailure(["let x = 'a' .. test_null_channel()"], 'E1105')
  endfunc
  
  " test multiply, divide, modulo
--- 1109,1144 ----
  
  func Test_expr5_fails()
    let msg = "white space required before and after '+'"
!   call CheckDefFailure(["let x = 1+2"], msg, 1)
!   call CheckDefFailure(["let x = 1 +2"], msg, 1)
!   call CheckDefFailure(["let x = 1+ 2"], msg, 1)
  
    let msg = "white space required before and after '-'"
!   call CheckDefFailure(["let x = 1-2"], msg, 1)
!   call CheckDefFailure(["let x = 1 -2"], msg, 1)
!   call CheckDefFailure(["let x = 1- 2"], msg, 1)
  
    let msg = "white space required before and after '..'"
!   call CheckDefFailure(["let x = '1'..'2'"], msg, 1)
!   call CheckDefFailure(["let x = '1' ..'2'"], msg, 1)
!   call CheckDefFailure(["let x = '1'.. '2'"], msg, 1)
! 
!   call CheckDefFailure(["let x = 0z1122 + 33"], 'E1051', 1)
!   call CheckDefFailure(["let x = 0z1122 + [3]"], 'E1051', 1)
!   call CheckDefFailure(["let x = 0z1122 + 'asd'"], 'E1051', 1)
!   call CheckDefFailure(["let x = 33 + 0z1122"], 'E1051', 1)
!   call CheckDefFailure(["let x = [3] + 0z1122"], 'E1051', 1)
!   call CheckDefFailure(["let x = 'asdf' + 0z1122"], 'E1051', 1)
!   call CheckDefFailure(["let x = 6 + xxx"], 'E1001', 1)
! 
!   call CheckDefFailure(["let x = 'a' .. [1]"], 'E1105', 1)
!   call CheckDefFailure(["let x = 'a' .. #{a: 1}"], 'E1105', 1)
!   call CheckDefFailure(["let x = 'a' .. test_void()"], 'E1105', 1)
!   call CheckDefFailure(["let x = 'a' .. 0z32"], 'E1105', 1)
!   call CheckDefFailure(["let x = 'a' .. function('len')"], 'E1105', 1)
!   call CheckDefFailure(["let x = 'a' .. function('len', ['a'])"], 'E1105', 1)
!   call CheckDefFailure(["let x = 'a' .. test_null_job()"], 'E1105', 1)
!   call CheckDefFailure(["let x = 'a' .. test_null_channel()"], 'E1105', 1)
  endfunc
  
  " test multiply, divide, modulo
***************
*** 1179,1185 ****
                        * yf[0])
    endif
  
!   call CheckDefFailure(["let x = 6 * xxx"], 'E1001')
  enddef
  
  def Test_expr6_vim9script()
--- 1179,1185 ----
                        * yf[0])
    endif
  
!   call CheckDefFailure(["let x = 6 * xxx"], 'E1001', 1)
  enddef
  
  def Test_expr6_vim9script()
***************
*** 1215,1231 ****
        vim9script
        echo 5*6
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
        vim9script
        echo 5 *6
    END
!   CheckScriptFailure(lines, 'E1004:')
    lines =<< trim END
        vim9script
        echo 5* 6
    END
!   CheckScriptFailure(lines, 'E1004:')
  enddef
  
  def Test_expr6_float()
--- 1215,1231 ----
        vim9script
        echo 5*6
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
        echo 5 *6
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
        echo 5* 6
    END
!   CheckScriptFailure(lines, 'E1004:', 2)
  enddef
  
  def Test_expr6_float()
***************
*** 1260,1304 ****
  
  func Test_expr6_fails()
    let msg = "white space required before and after '*'"
!   call CheckDefFailure(["let x = 1*2"], msg)
!   call CheckDefFailure(["let x = 1 *2"], msg)
!   call CheckDefFailure(["let x = 1* 2"], msg)
  
    let msg = "white space required before and after '/'"
!   call CheckDefFailure(["let x = 1/2"], msg)
!   call CheckDefFailure(["let x = 1 /2"], msg)
!   call CheckDefFailure(["let x = 1/ 2"], msg)
  
    let msg = "white space required before and after '%'"
!   call CheckDefFailure(["let x = 1%2"], msg)
!   call CheckDefFailure(["let x = 1 %2"], msg)
!   call CheckDefFailure(["let x = 1% 2"], msg)
! 
!   call CheckDefFailure(["let x = '1' * '2'"], 'E1036:')
!   call CheckDefFailure(["let x = '1' / '2'"], 'E1036:')
!   call CheckDefFailure(["let x = '1' % '2'"], 'E1035:')
! 
!   call CheckDefFailure(["let x = 0z01 * 0z12"], 'E1036:')
!   call CheckDefFailure(["let x = 0z01 / 0z12"], 'E1036:')
!   call CheckDefFailure(["let x = 0z01 % 0z12"], 'E1035:')
! 
!   call CheckDefFailure(["let x = [1] * [2]"], 'E1036:')
!   call CheckDefFailure(["let x = [1] / [2]"], 'E1036:')
!   call CheckDefFailure(["let x = [1] % [2]"], 'E1035:')
! 
!   call CheckDefFailure(["let x = #{one: 1} * #{two: 2}"], 'E1036:')
!   call CheckDefFailure(["let x = #{one: 1} / #{two: 2}"], 'E1036:')
!   call CheckDefFailure(["let x = #{one: 1} % #{two: 2}"], 'E1035:')
  
!   call CheckDefFailure(["let x = 0xff[1]"], 'E1107:')
    if has('float')
!     call CheckDefFailure(["let x = 0.7[1]"], 'E1107:')
    endif
  endfunc
  
  func Test_expr6_float_fails()
    CheckFeature float
!   call CheckDefFailure(["let x = 1.0 % 2"], 'E1035:')
  endfunc
  
  " define here to use old style parsing
--- 1260,1304 ----
  
  func Test_expr6_fails()
    let msg = "white space required before and after '*'"
!   call CheckDefFailure(["let x = 1*2"], msg, 1)
!   call CheckDefFailure(["let x = 1 *2"], msg, 1)
!   call CheckDefFailure(["let x = 1* 2"], msg, 1)
  
    let msg = "white space required before and after '/'"
!   call CheckDefFailure(["let x = 1/2"], msg, 1)
!   call CheckDefFailure(["let x = 1 /2"], msg, 1)
!   call CheckDefFailure(["let x = 1/ 2"], msg, 1)
  
    let msg = "white space required before and after '%'"
!   call CheckDefFailure(["let x = 1%2"], msg, 1)
!   call CheckDefFailure(["let x = 1 %2"], msg, 1)
!   call CheckDefFailure(["let x = 1% 2"], msg, 1)
! 
!   call CheckDefFailure(["let x = '1' * '2'"], 'E1036:', 1)
!   call CheckDefFailure(["let x = '1' / '2'"], 'E1036:', 1)
!   call CheckDefFailure(["let x = '1' % '2'"], 'E1035:', 1)
! 
!   call CheckDefFailure(["let x = 0z01 * 0z12"], 'E1036:', 1)
!   call CheckDefFailure(["let x = 0z01 / 0z12"], 'E1036:', 1)
!   call CheckDefFailure(["let x = 0z01 % 0z12"], 'E1035:', 1)
! 
!   call CheckDefFailure(["let x = [1] * [2]"], 'E1036:', 1)
!   call CheckDefFailure(["let x = [1] / [2]"], 'E1036:', 1)
!   call CheckDefFailure(["let x = [1] % [2]"], 'E1035:', 1)
! 
!   call CheckDefFailure(["let x = #{one: 1} * #{two: 2}"], 'E1036:', 1)
!   call CheckDefFailure(["let x = #{one: 1} / #{two: 2}"], 'E1036:', 1)
!   call CheckDefFailure(["let x = #{one: 1} % #{two: 2}"], 'E1035:', 1)
  
!   call CheckDefFailure(["let x = 0xff[1]"], 'E1107:', 1)
    if has('float')
!     call CheckDefFailure(["let x = 0.7[1]"], 'E1107:', 1)
    endif
  endfunc
  
  func Test_expr6_float_fails()
    CheckFeature float
!   call CheckDefFailure(["let x = 1.0 % 2"], 'E1035:', 1)
  endfunc
  
  " define here to use old style parsing
***************
*** 1336,1344 ****
    let nr = <number>234
    assert_equal(234, nr)
  
!   call CheckDefFailure(["let x = <nr>123"], 'E1010:')
!   call CheckDefFailure(["let x = <number >123"], 'E1068:')
!   call CheckDefFailure(["let x = <number 123"], 'E1104:')
  enddef
  
  " test low level expression
--- 1336,1344 ----
    let nr = <number>234
    assert_equal(234, nr)
  
!   call CheckDefFailure(["let x = <nr>123"], 'E1010:', 1)
!   call CheckDefFailure(["let x = <number >123"], 'E1068:', 1)
!   call CheckDefFailure(["let x = <number 123"], 'E1104:', 1)
  enddef
  
  " test low level expression
***************
*** 1370,1376 ****
    assert_equal(g:blob_one, 0z01)
    assert_equal(g:blob_long, 0z0102.0304)
  
!   call CheckDefFailure(["let x = 0z123"], 'E973:')
  enddef
  
  def Test_expr7_string()
--- 1370,1376 ----
    assert_equal(g:blob_one, 0z01)
    assert_equal(g:blob_long, 0z0102.0304)
  
!   call CheckDefFailure(["let x = 0z123"], 'E973:', 1)
  enddef
  
  def Test_expr7_string()
***************
*** 1383,1398 ****
    assert_equal(g:string_long, "abcdefghijklm")
    assert_equal(g:string_special, "ab\ncd\ref\ekk")
  
!   call CheckDefFailure(['let x = "abc'], 'E114:')
!   call CheckDefFailure(["let x = 'abc"], 'E115:')
  enddef
  
  def Test_expr7_vimvar()
    let old: list<string> = v:oldfiles
    let compl: dict<any> = v:completed_item
  
!   call CheckDefFailure(["let old: list<number> = v:oldfiles"], 'E1012: type 
mismatch, expected list<number> but got list<string>')
!   call CheckDefFailure(["let old: dict<number> = v:completed_item"], 'E1012: 
type mismatch, expected dict<number> but got dict<any>')
  enddef
  
  def Test_expr7_special()
--- 1383,1398 ----
    assert_equal(g:string_long, "abcdefghijklm")
    assert_equal(g:string_special, "ab\ncd\ref\ekk")
  
!   call CheckDefFailure(['let x = "abc'], 'E114:', 1)
!   call CheckDefFailure(["let x = 'abc"], 'E115:', 1)
  enddef
  
  def Test_expr7_vimvar()
    let old: list<string> = v:oldfiles
    let compl: dict<any> = v:completed_item
  
!   call CheckDefFailure(["let old: list<number> = v:oldfiles"], 'E1012: type 
mismatch, expected list<number> but got list<string>', 1)
!   call CheckDefFailure(["let old: dict<number> = v:completed_item"], 'E1012: 
type mismatch, expected dict<number> but got dict<any>', 1)
  enddef
  
  def Test_expr7_special()
***************
*** 1414,1424 ****
    assert_equal(g:special_null, v:null)
    assert_equal(g:special_none, v:none)
  
!   call CheckDefFailure(['v:true = true'], 'E46:')
!   call CheckDefFailure(['v:true = false'], 'E46:')
!   call CheckDefFailure(['v:false = true'], 'E46:')
!   call CheckDefFailure(['v:null = 11'], 'E46:')
!   call CheckDefFailure(['v:none = 22'], 'E46:')
  enddef
  
  def Test_expr7_special_vim9script()
--- 1414,1424 ----
    assert_equal(g:special_null, v:null)
    assert_equal(g:special_none, v:none)
  
!   call CheckDefFailure(['v:true = true'], 'E46:', 1)
!   call CheckDefFailure(['v:true = false'], 'E46:', 1)
!   call CheckDefFailure(['v:false = true'], 'E46:', 1)
!   call CheckDefFailure(['v:null = 11'], 'E46:', 1)
!   call CheckDefFailure(['v:none = 22'], 'E46:', 1)
  enddef
  
  def Test_expr7_special_vim9script()
***************
*** 1463,1486 ****
        2] [3,
                4]
  
!   call CheckDefFailure(["let x = 1234[3]"], 'E1107:')
    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(["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:', 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:')
!   call CheckDefFailure(["let l: list<string> = [234, 'x']"], 'E1012:')
!   call CheckDefFailure(["let l: list<string> = ['x', 123]"], 'E1012:')
  enddef
  
  def Test_expr7_list_vim9script()
--- 1463,1486 ----
        2] [3,
                4]
  
!   call CheckDefFailure(["let x = 1234[3]"], 'E1107:', 1)
    call CheckDefExecFailure(["let x = g:anint[3]"], 'E1062:', 1)
  
!   call CheckDefFailure(["let x = g:list_mixed[xxx]"], 'E1001:', 1)
  
!   call CheckDefFailure(["let x = [1,2,3]"], 'E1069:', 1)
!   call CheckDefFailure(["let x = [1 ,2, 3]"], 'E1068:', 1)
  
    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:', 2)
!   call CheckDefFailure(["let x = g:list_mixed[0"], 'E1097:', 2)
!   call CheckDefExecFailure(["let x = g:list_empty[3]"], 'E684:', 1)
!   call CheckDefFailure(["let l: list<number> = [234, 'x']"], 'E1012:', 1)
!   call CheckDefFailure(["let l: list<number> = ['x', 234]"], 'E1012:', 1)
!   call CheckDefFailure(["let l: list<string> = [234, 'x']"], 'E1012:', 1)
!   call CheckDefFailure(["let l: list<string> = ['x', 123]"], 'E1012:', 1)
  enddef
  
  def Test_expr7_list_vim9script()
***************
*** 1510,1543 ****
        vim9script
        let l = [11,22]
    END
!   CheckScriptFailure(lines, 'E1069:')
  
    lines =<< trim END
        vim9script
        let l = [11 , 22]
    END
!   CheckScriptFailure(lines, 'E1068:')
  
    lines =<< trim END
      vim9script
      let l: list<number> = [234, 'x']
    END
!   CheckScriptFailure(lines, 'E1012:')
    lines =<< trim END
      vim9script
      let l: list<number> = ['x', 234]
    END
!   CheckScriptFailure(lines, 'E1012:')
    lines =<< trim END
      vim9script
      let l: list<string> = ['x', 234]
    END
!   CheckScriptFailure(lines, 'E1012:')
    lines =<< trim END
      vim9script
      let l: list<string> = [234, 'x']
    END
!   CheckScriptFailure(lines, 'E1012:')
  enddef
  
  def LambdaWithComments(): func
--- 1510,1543 ----
        vim9script
        let l = [11,22]
    END
!   CheckScriptFailure(lines, 'E1069:', 2)
  
    lines =<< trim END
        vim9script
        let l = [11 , 22]
    END
!   CheckScriptFailure(lines, 'E1068:', 2)
  
    lines =<< trim END
      vim9script
      let l: list<number> = [234, 'x']
    END
!   CheckScriptFailure(lines, 'E1012:', 2)
    lines =<< trim END
      vim9script
      let l: list<number> = ['x', 234]
    END
!   CheckScriptFailure(lines, 'E1012:', 2)
    lines =<< trim END
      vim9script
      let l: list<string> = ['x', 234]
    END
!   CheckScriptFailure(lines, 'E1012:', 2)
    lines =<< trim END
      vim9script
      let l: list<string> = [234, 'x']
    END
!   CheckScriptFailure(lines, 'E1012:', 2)
  enddef
  
  def LambdaWithComments(): func
***************
*** 1601,1608 ****
    assert_equal(false, LambdaUsingArg(0)())
    assert_equal(true, LambdaUsingArg(1)())
  
!   call CheckDefFailure(["filter([1, 2], {k,v -> 1})"], 'E1069:')
!   call CheckDefFailure(["let L = {a -> a + b}"], 'E1001:')
  
    assert_equal('xxxyyy', 'xxx'->{a, b -> a .. b}('yyy'))
  
--- 1601,1609 ----
    assert_equal(false, LambdaUsingArg(0)())
    assert_equal(true, LambdaUsingArg(1)())
  
!   call CheckDefFailure(["filter([1, 2], {k,v -> 1})"], 'E1069:', 1)
!   # error is in first line of the lambda
!   call CheckDefFailure(["let L = {a -> a + b}"], 'E1001:', 0)
  
    assert_equal('xxxyyy', 'xxx'->{a, b -> a .. b}('yyy'))
  
***************
*** 1610,1616 ****
          'E1106: one argument too many')
    CheckDefExecFailure(["let s = 'asdf'->{a -> a}('x', 'y')"],
          'E1106: 2 arguments too many')
!   CheckDefFailure(["echo 'asdf'->{a -> a}(x)"], 'E1001:')
  enddef
  
  def Test_expr7_lambda_vim9script()
--- 1611,1617 ----
          'E1106: one argument too many')
    CheckDefExecFailure(["let s = 'asdf'->{a -> a}('x', 'y')"],
          'E1106: 2 arguments too many')
!   CheckDefFailure(["echo 'asdf'->{a -> a}(x)"], 'E1001:', 1)
  enddef
  
  def Test_expr7_lambda_vim9script()
***************
*** 1647,1674 ****
    mixed = #{a: 234}
    mixed = #{}
  
!   call CheckDefFailure(["let x = #{a:8}"], 'E1069:')
!   call CheckDefFailure(["let x = #{a : 8}"], 'E1068:')
!   call CheckDefFailure(["let x = #{a :8}"], 'E1068:')
!   call CheckDefFailure(["let x = #{a: 8 , b: 9}"], 'E1068:')
! 
!   call CheckDefFailure(["let x = #{8: 8}"], 'E1014:')
!   call CheckDefFailure(["let x = #{xxx}"], 'E720:')
!   call CheckDefFailure(["let x = #{xxx: 1", "let y = 2"], 'E722:')
!   call CheckDefFailure(["let x = #{xxx: 1,"], 'E723:')
!   call CheckDefFailure(["let x = {'a': xxx}"], 'E1001:')
!   call CheckDefFailure(["let x = {xxx: 8}"], 'E1001:')
!   call CheckDefFailure(["let x = #{a: 1, a: 2}"], 'E721:')
!   call CheckDefFailure(["let x = #"], 'E1015:')
!   call CheckDefFailure(["let x += 1"], 'E1020:')
!   call CheckDefFailure(["let x = x + 1"], 'E1001:')
!   call CheckDefExecFailure(["let x = g:anint.member"], 'E715:')
!   call CheckDefExecFailure(["let x = g:dict_empty.member"], 'E716:')
! 
!   call CheckDefFailure(['let x: dict<number> = #{a: 234, b: "1"}'], 'E1012:')
!   call CheckDefFailure(['let x: dict<number> = #{a: "x", b: 134}'], 'E1012:')
!   call CheckDefFailure(['let x: dict<string> = #{a: 234, b: "1"}'], 'E1012:')
!   call CheckDefFailure(['let x: dict<string> = #{a: "x", b: 134}'], 'E1012:')
  enddef
  
  def Test_expr7_dict_vim9script()
--- 1648,1675 ----
    mixed = #{a: 234}
    mixed = #{}
  
!   call CheckDefFailure(["let x = #{a:8}"], 'E1069:', 1)
!   call CheckDefFailure(["let x = #{a : 8}"], 'E1068:', 1)
!   call CheckDefFailure(["let x = #{a :8}"], 'E1068:', 1)
!   call CheckDefFailure(["let x = #{a: 8 , b: 9}"], 'E1068:', 1)
! 
!   call CheckDefFailure(["let x = #{8: 8}"], 'E1014:', 1)
!   call CheckDefFailure(["let x = #{xxx}"], 'E720:', 1)
!   call CheckDefFailure(["let x = #{xxx: 1", "let y = 2"], 'E722:', 2)
!   call CheckDefFailure(["let x = #{xxx: 1,"], 'E723:', 2)
!   call CheckDefFailure(["let x = {'a': xxx}"], 'E1001:', 1)
!   call CheckDefFailure(["let x = {xxx: 8}"], 'E1001:', 1)
!   call CheckDefFailure(["let x = #{a: 1, a: 2}"], 'E721:', 1)
!   call CheckDefFailure(["let x = #"], 'E1015:', 1)
!   call CheckDefFailure(["let x += 1"], 'E1020:', 1)
!   call CheckDefFailure(["let x = x + 1"], 'E1001:', 1)
!   call CheckDefExecFailure(["let x = g:anint.member"], 'E715:', 1)
!   call CheckDefExecFailure(["let x = g:dict_empty.member"], 'E716:', 1)
! 
!   call CheckDefFailure(['let x: dict<number> = #{a: 234, b: "1"}'], 'E1012:', 
1)
!   call CheckDefFailure(['let x: dict<number> = #{a: "x", b: 134}'], 'E1012:', 
1)
!   call CheckDefFailure(['let x: dict<string> = #{a: 234, b: "1"}'], 'E1012:', 
1)
!   call CheckDefFailure(['let x: dict<string> = #{a: "x", b: 134}'], 'E1012:', 
1)
  enddef
  
  def Test_expr7_dict_vim9script()
***************
*** 1703,1754 ****
        vim9script
        let d = #{one:1, two: 2}
    END
!   CheckScriptFailure(lines, 'E1069:')
  
    lines =<< trim END
        vim9script
        let d = #{one: 1,two: 2}
    END
!   CheckScriptFailure(lines, 'E1069:')
  
    lines =<< trim END
        vim9script
        let d = #{one : 1}
    END
!   CheckScriptFailure(lines, 'E1068:')
  
    lines =<< trim END
        vim9script
        let d = #{one:1}
    END
!   CheckScriptFailure(lines, 'E1069:')
  
    lines =<< trim END
        vim9script
        let d = #{one: 1 , two: 2}
    END
!   CheckScriptFailure(lines, 'E1068:')
  
    lines =<< trim END
      vim9script
      let l: dict<number> = #{a: 234, b: 'x'}
    END
!   CheckScriptFailure(lines, 'E1012:')
    lines =<< trim END
      vim9script
      let l: dict<number> = #{a: 'x', b: 234}
    END
!   CheckScriptFailure(lines, 'E1012:')
    lines =<< trim END
      vim9script
      let l: dict<string> = #{a: 'x', b: 234}
    END
!   CheckScriptFailure(lines, 'E1012:')
    lines =<< trim END
      vim9script
      let l: dict<string> = #{a: 234, b: 'x'}
    END
!   CheckScriptFailure(lines, 'E1012:')
  enddef
  
  let g:oneString = 'one'
--- 1704,1755 ----
        vim9script
        let d = #{one:1, two: 2}
    END
!   CheckScriptFailure(lines, 'E1069:', 2)
  
    lines =<< trim END
        vim9script
        let d = #{one: 1,two: 2}
    END
!   CheckScriptFailure(lines, 'E1069:', 2)
  
    lines =<< trim END
        vim9script
        let d = #{one : 1}
    END
!   CheckScriptFailure(lines, 'E1068:', 2)
  
    lines =<< trim END
        vim9script
        let d = #{one:1}
    END
!   CheckScriptFailure(lines, 'E1069:', 2)
  
    lines =<< trim END
        vim9script
        let d = #{one: 1 , two: 2}
    END
!   CheckScriptFailure(lines, 'E1068:', 2)
  
    lines =<< trim END
      vim9script
      let l: dict<number> = #{a: 234, b: 'x'}
    END
!   CheckScriptFailure(lines, 'E1012:', 2)
    lines =<< trim END
      vim9script
      let l: dict<number> = #{a: 'x', b: 234}
    END
!   CheckScriptFailure(lines, 'E1012:', 2)
    lines =<< trim END
      vim9script
      let l: dict<string> = #{a: 'x', b: 234}
    END
!   CheckScriptFailure(lines, 'E1012:', 2)
    lines =<< trim END
      vim9script
      let l: dict<string> = #{a: 234, b: 'x'}
    END
!   CheckScriptFailure(lines, 'E1012:', 2)
  enddef
  
  let g:oneString = 'one'
***************
*** 1772,1780 ****
    assert_equal('one', #{one: 'one'}.one)
    assert_equal('one', #{one: 'one'}[g:oneString])
  
!   call CheckDefFailure(["let x = g:dict_one.#$!"], 'E1002:')
!   call CheckDefExecFailure(["let d: dict<any>", "echo d['a']"], 'E716:')
!   call CheckDefExecFailure(["let d: dict<number>", "d = g:list_empty"], 
'E1029: Expected dict but got list')
  enddef
  
  def Test_expr7_any_index_slice()
--- 1773,1781 ----
    assert_equal('one', #{one: 'one'}.one)
    assert_equal('one', #{one: 'one'}[g:oneString])
  
!   call CheckDefFailure(["let x = g:dict_one.#$!"], 'E1002:', 1)
!   call CheckDefExecFailure(["let d: dict<any>", "echo d['a']"], 'E716:', 2)
!   call CheckDefExecFailure(["let d: dict<number>", "d = g:list_empty"], 
'E1029: Expected dict but got list', 2)
  enddef
  
  def Test_expr7_any_index_slice()
***************
*** 1844,1863 ****
    CheckDefSuccess(lines)
    CheckScriptSuccess(['vim9script'] + lines)
  
!   CheckDefExecFailure(['echo g:testblob[2]'], 'E979:')
!   CheckScriptFailure(['vim9script', 'echo g:testblob[2]'], 'E979:')
!   CheckDefExecFailure(['echo g:testblob[-3]'], 'E979:')
!   CheckScriptFailure(['vim9script', 'echo g:testblob[-3]'], 'E979:')
! 
!   CheckDefExecFailure(['echo g:testlist[4]'], 'E684:')
!   CheckScriptFailure(['vim9script', 'echo g:testlist[4]'], 'E684:')
!   CheckDefExecFailure(['echo g:testlist[-5]'], 'E684:')
!   CheckScriptFailure(['vim9script', 'echo g:testlist[-5]'], 'E684:')
! 
!   CheckDefExecFailure(['echo g:testdict["a":"b"]'], 'E719:')
!   CheckScriptFailure(['vim9script', 'echo g:testdict["a":"b"]'], 'E719:')
!   CheckDefExecFailure(['echo g:testdict[1]'], 'E716:')
!   CheckScriptFailure(['vim9script', 'echo g:testdict[1]'], 'E716:')
  
    unlet g:teststring
    unlet g:testblob
--- 1845,1864 ----
    CheckDefSuccess(lines)
    CheckScriptSuccess(['vim9script'] + lines)
  
!   CheckDefExecFailure(['echo g:testblob[2]'], 'E979:', 1)
!   CheckScriptFailure(['vim9script', 'echo g:testblob[2]'], 'E979:', 2)
!   CheckDefExecFailure(['echo g:testblob[-3]'], 'E979:', 1)
!   CheckScriptFailure(['vim9script', 'echo g:testblob[-3]'], 'E979:', 2)
! 
!   CheckDefExecFailure(['echo g:testlist[4]'], 'E684:', 1)
!   CheckScriptFailure(['vim9script', 'echo g:testlist[4]'], 'E684:', 2)
!   CheckDefExecFailure(['echo g:testlist[-5]'], 'E684:', 1)
!   CheckScriptFailure(['vim9script', 'echo g:testlist[-5]'], 'E684:', 2)
! 
!   CheckDefExecFailure(['echo g:testdict["a":"b"]'], 'E719:', 1)
!   CheckScriptFailure(['vim9script', 'echo g:testdict["a":"b"]'], 'E719:', 2)
!   CheckDefExecFailure(['echo g:testdict[1]'], 'E716:', 1)
!   CheckScriptFailure(['vim9script', 'echo g:testdict[1]'], 'E716:', 2)
  
    unlet g:teststring
    unlet g:testblob
***************
*** 1926,1932 ****
    assert_equal('testvar', $TESTVAR)
    assert_equal('', $ASDF_ASD_XXX)
  
!   call CheckDefFailure(["let x = $$$"], 'E1002:')
  enddef
  
  def Test_expr7_register()
--- 1927,1933 ----
    assert_equal('testvar', $TESTVAR)
    assert_equal('', $ASDF_ASD_XXX)
  
!   call CheckDefFailure(["let x = $$$"], 'E1002:', 1)
  enddef
  
  def Test_expr7_register()
***************
*** 1941,1947 ****
  
    normal axyz
    assert_equal("xyz", @.)
!   call CheckDefFailure(["@. = 'yes'"], 'E354:')
  
    @/ = 'slash'
    assert_equal('slash', @/)
--- 1942,1948 ----
  
    normal axyz
    assert_equal("xyz", @.)
!   call CheckDefFailure(["@. = 'yes'"], 'E354:', 1)
  
    @/ = 'slash'
    assert_equal('slash', @/)
***************
*** 2026,2036 ****
    assert_equal(true, !range(5)->empty())
    assert_equal([0, 1, 2], --3->range())
  
!   call CheckDefFailure(["let x = 'yes'->Echo"], 'E107:')
    call CheckScriptFailure([
        "vim9script",
        "let x = substitute ('x', 'x', 'x', 'x')"
!       ], 'E121:')
  
    let auto_lines =<< trim END
        def g:some#func(): string
--- 2027,2037 ----
    assert_equal(true, !range(5)->empty())
    assert_equal([0, 1, 2], --3->range())
  
!   call CheckDefFailure(["let x = 'yes'->Echo"], 'E107:', 1)
    call CheckScriptFailure([
        "vim9script",
        "let x = substitute ('x', 'x', 'x', 'x')"
!       ], 'E121:', 2)
  
    let auto_lines =<< trim END
        def g:some#func(): string
***************
*** 2085,2129 ****
  enddef
  
  func Test_expr7_fails()
!   call CheckDefFailure(["let x = (12"], "E110:")
  
!   call CheckDefFailure(["let x = -'xx'"], "E1030:")
!   call CheckDefFailure(["let x = +'xx'"], "E1030:")
!   call CheckDefFailure(["let x = -0z12"], "E974:")
!   call CheckDefExecFailure(["let x = -[8]"], "E39:")
!   call CheckDefExecFailure(["let x = -{'a': 1}"], "E39:")
  
!   call CheckDefFailure(["let x = @"], "E1002:")
!   call CheckDefFailure(["let x = @<"], "E354:")
  
!   call CheckDefFailure(["let x = [1, 2"], "E697:")
!   call CheckDefFailure(["let x = [notfound]"], "E1001:")
  
!   call CheckDefFailure(["let x = { -> 123) }"], "E451:")
!   call CheckDefFailure(["let x = 123->{x -> x + 5) }"], "E451:")
  
!   call CheckDefFailure(["let x = &notexist"], 'E113:')
!   call CheckDefFailure(["&grepprg = [343]"], 'E1012:')
  
!   call CheckDefExecFailure(["echo s:doesnt_exist"], 'E121:')
!   call CheckDefExecFailure(["echo g:doesnt_exist"], 'E121:')
  
!   call CheckDefFailure(["echo a:somevar"], 'E1075:')
!   call CheckDefFailure(["echo l:somevar"], 'E1075:')
!   call CheckDefFailure(["echo x:somevar"], 'E1075:')
  
!   call CheckDefExecFailure(["let x = +g:astring"], 'E1030:')
!   call CheckDefExecFailure(["let x = +g:ablob"], 'E974:')
!   call CheckDefExecFailure(["let x = +g:alist"], 'E745:')
!   call CheckDefExecFailure(["let x = +g:adict"], 'E728:')
  
!   call CheckDefFailure(["let x = ''", "let y = x.memb"], 'E715:')
  
!   call CheckDefFailure(["'yes'->", "Echo()"], 'E488: Trailing characters: ->')
  
!   call CheckDefExecFailure(["[1, 2->len()"], 'E697:')
!   call CheckDefExecFailure(["#{a: 1->len()"], 'E488:')
!   call CheckDefExecFailure(["{'a': 1->len()"], 'E723:')
  endfunc
  
  let g:Funcrefs = [function('add')]
--- 2086,2130 ----
  enddef
  
  func Test_expr7_fails()
!   call CheckDefFailure(["let x = (12"], "E110:", 1)
  
!   call CheckDefFailure(["let x = -'xx'"], "E1030:", 1)
!   call CheckDefFailure(["let x = +'xx'"], "E1030:", 1)
!   call CheckDefFailure(["let x = -0z12"], "E974:", 1)
!   call CheckDefExecFailure(["let x = -[8]"], "E39:", 1)
!   call CheckDefExecFailure(["let x = -{'a': 1}"], "E39:", 1)
  
!   call CheckDefFailure(["let x = @"], "E1002:", 1)
!   call CheckDefFailure(["let x = @<"], "E354:", 1)
  
!   call CheckDefFailure(["let x = [1, 2"], "E697:", 2)
!   call CheckDefFailure(["let x = [notfound]"], "E1001:", 1)
  
!   call CheckDefFailure(["let x = { -> 123) }"], "E451:", 1)
!   call CheckDefFailure(["let x = 123->{x -> x + 5) }"], "E451:", 1)
  
!   call CheckDefFailure(["let x = &notexist"], 'E113:', 1)
!   call CheckDefFailure(["&grepprg = [343]"], 'E1012:', 1)
  
!   call CheckDefExecFailure(["echo s:doesnt_exist"], 'E121:', 1)
!   call CheckDefExecFailure(["echo g:doesnt_exist"], 'E121:', 1)
  
!   call CheckDefFailure(["echo a:somevar"], 'E1075:', 1)
!   call CheckDefFailure(["echo l:somevar"], 'E1075:', 1)
!   call CheckDefFailure(["echo x:somevar"], 'E1075:', 1)
  
!   call CheckDefExecFailure(["let x = +g:astring"], 'E1030:', 1)
!   call CheckDefExecFailure(["let x = +g:ablob"], 'E974:', 1)
!   call CheckDefExecFailure(["let x = +g:alist"], 'E745:', 1)
!   call CheckDefExecFailure(["let x = +g:adict"], 'E728:', 1)
  
!   call CheckDefFailure(["let x = ''", "let y = x.memb"], 'E715:', 2)
  
!   call CheckDefFailure(["'yes'->", "Echo()"], 'E488: Trailing characters: 
->', 1)
  
!   call CheckDefExecFailure(["[1, 2->len()"], 'E697:', 2)
!   call CheckDefExecFailure(["#{a: 1->len()"], 'E488:', 1)
!   call CheckDefExecFailure(["{'a': 1->len()"], 'E723:', 2)
  endfunc
  
  let g:Funcrefs = [function('add')]
***************
*** 2246,2252 ****
  
    lines = ['let l = [0, 1, 2]', 'echo l[g:astring : g:theone]']
    CheckDefExecFailure(lines, 'E1029:')
!   CheckScriptFailure(['vim9script'] + lines, 'E1030:')
  enddef
  
  def Test_expr7_subscript_linebreak()
--- 2247,2253 ----
  
    lines = ['let l = [0, 1, 2]', 'echo l[g:astring : g:theone]']
    CheckDefExecFailure(lines, 'E1029:')
!   CheckScriptFailure(['vim9script'] + lines, 'E1030:', 3)
  enddef
  
  def Test_expr7_subscript_linebreak()
***************
*** 2307,2331 ****
  enddef
  
  func Test_expr7_trailing_fails()
!   call CheckDefFailure(['let l = [2]', 'l->{l -> add(l, 8)}'], 'E107')
!   call CheckDefFailure(['let l = [2]', 'l->{l -> add(l, 8)} ()'], 'E274')
  endfunc
  
  func Test_expr_fails()
!   call CheckDefFailure(["let x = '1'is2"], 'E488:')
!   call CheckDefFailure(["let x = '1'isnot2"], 'E488:')
  
!   call CheckDefFailure(["CallMe ('yes')"], 'E476:')
!   call CheckDefFailure(["CallMe2('yes','no')"], 'E1069:')
!   call CheckDefFailure(["CallMe2('yes' , 'no')"], 'E1068:')
! 
!   call CheckDefFailure(["v:nosuch += 3"], 'E1001:')
!   call CheckDefFailure(["let v:statusmsg = ''"], 'E1016: Cannot declare a v: 
variable:')
!   call CheckDefFailure(["let asdf = v:nosuch"], 'E1001:')
! 
!   call CheckDefFailure(["echo len('asdf'"], 'E110:')
!   call CheckDefFailure(["echo 
Func0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789()"],
 'E1011:')
!   call CheckDefFailure(["echo doesnotexist()"], 'E117:')
  endfunc
  
  " vim: shiftwidth=2 sts=2 expandtab
--- 2308,2332 ----
  enddef
  
  func Test_expr7_trailing_fails()
!   call CheckDefFailure(['let l = [2]', 'l->{l -> add(l, 8)}'], 'E107:', 2)
!   call CheckDefFailure(['let l = [2]', 'l->{l -> add(l, 8)} ()'], 'E274:', 2)
  endfunc
  
  func Test_expr_fails()
!   call CheckDefFailure(["let x = '1'is2"], 'E488:', 1)
!   call CheckDefFailure(["let x = '1'isnot2"], 'E488:', 1)
  
!   call CheckDefFailure(["CallMe ('yes')"], 'E476:', 1)
!   call CheckDefFailure(["CallMe2('yes','no')"], 'E1069:', 1)
!   call CheckDefFailure(["CallMe2('yes' , 'no')"], 'E1068:', 1)
! 
!   call CheckDefFailure(["v:nosuch += 3"], 'E1001:', 1)
!   call CheckDefFailure(["let v:statusmsg = ''"], 'E1016: Cannot declare a v: 
variable:', 1)
!   call CheckDefFailure(["let asdf = v:nosuch"], 'E1001:', 1)
! 
!   call CheckDefFailure(["echo len('asdf'"], 'E110:', 2)
!   call CheckDefFailure(["echo 
Func0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789()"],
 'E1011:', 1)
!   call CheckDefFailure(["echo doesnotexist()"], 'E117:', 1)
  endfunc
  
  " vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.1480/src/testdir/vim9.vim        2020-08-18 13:41:47.215350419 
+0200
--- src/testdir/vim9.vim        2020-08-18 20:28:52.739996573 +0200
***************
*** 10,33 ****
  
  " Check that "lines" inside ":def" results in an "error" message.
  " 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, a:lnum)
    call delete('Xdef')
  endfunc
  
  " Check that "lines" inside ":def" results in an "error" message when 
executed.
  " 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, a:lnum)
    call delete('Xdef')
  endfunc
  
! def CheckScriptFailure(lines: list<string>, error: string)
    writefile(lines, 'Xdef')
!   assert_fails('so Xdef', error, lines)
    delete('Xdef')
  enddef
  
--- 10,37 ----
  
  " Check that "lines" inside ":def" results in an "error" message.
  " If "lnum" is given check that the error is reported for this line.
! " Add a line before and after to make it less likely that the line number is
! " accidentally correct.
! func CheckDefFailure(lines, error, lnum = -3)
!   call writefile(['def Func()', '# comment'] + a:lines + ['#comment', 
'enddef', 'defcompile'], 'Xdef')
!   call assert_fails('so Xdef', a:error, a:lines, a:lnum + 1)
    call delete('Xdef')
  endfunc
  
  " Check that "lines" inside ":def" results in an "error" message when 
executed.
  " If "lnum" is given check that the error is reported for this line.
! " Add a line before and after to make it less likely that the line number is
! " accidentally correct.
! func CheckDefExecFailure(lines, error, lnum = -3)
!   call writefile(['def Func()', '# comment'] + a:lines + ['#comment', 
'enddef'], 'Xdef')
    so Xdef
!   call assert_fails('call Func()', a:error, a:lines, a:lnum + 1)
    call delete('Xdef')
  endfunc
  
! def CheckScriptFailure(lines: list<string>, error: string, lnum = -3)
    writefile(lines, 'Xdef')
!   assert_fails('so Xdef', error, lines, lnum)
    delete('Xdef')
  enddef
  
*** ../vim-8.2.1480/src/vim9execute.c   2020-08-18 13:41:47.215350419 +0200
--- src/vim9execute.c   2020-08-18 19:57:46.938533417 +0200
***************
*** 2317,2322 ****
--- 2317,2323 ----
                    // slice: composite is at stack-3, indexes at stack-2 and
                    // stack-1
                    tv = is_slice ? STACK_TV_BOT(-3) : STACK_TV_BOT(-2);
+                   SOURCING_LNUM = iptr->isn_lnum;
                    if (check_can_index(tv, TRUE, TRUE) == FAIL)
                        goto on_error;
                    var1 = is_slice ? STACK_TV_BOT(-2) : STACK_TV_BOT(-1);
***************
*** 2463,2468 ****
--- 2464,2470 ----
                    int         error = FALSE;
  
                    tv = STACK_TV_BOT(-1);
+                   SOURCING_LNUM = iptr->isn_lnum;
                    if (check_not_string(tv) == FAIL)
                        goto on_error;
                    (void)tv_get_number_chk(tv, &error);
*** ../vim-8.2.1480/src/version.c       2020-08-18 19:11:34.486104966 +0200
--- src/version.c       2020-08-18 19:44:16.870459441 +0200
***************
*** 756,757 ****
--- 756,759 ----
  {   /* Add new patch number below this line */
+ /**/
+     1481,
  /**/

-- 
You are Dead.  Do you wish to restart, load, or quit?

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202008181834.07IIYjL21193529%40masaka.moolenaar.net.

Raspunde prin e-mail lui