Patch 8.2.1759
Problem:    Vim9: Some tests are still using :let.
Solution:   Change more declarations to use :var.
Files:      src/testdir/test_vim9_expr.vim


*** ../vim-8.2.1758/src/testdir/test_vim9_expr.vim      2020-09-27 
17:44:59.545923881 +0200
--- src/testdir/test_vim9_expr.vim      2020-09-27 17:57:03.396180858 +0200
***************
*** 3,8 ****
--- 3,10 ----
  source check.vim
  source vim9.vim
  
+ " TODO: remove later
+ let v:disallow_let = 1
  
  let g:cond = v:false
  def FuncOne(arg: number): string
***************
*** 28,35 ****
    assert_equal('one', 0z1234 ? 'one' : 'two')
    assert_equal('one', [0] ? 'one' : 'two')
    assert_equal('one', #{x: 0} ? 'one' : 'two')
!   let var = 1
!   assert_equal('one', var ? 'one' : 'two')
  
    assert_equal('two', false ? 'one' : 'two')
    assert_equal('two', 0 ? 'one' : 'two')
--- 30,37 ----
    assert_equal('one', 0z1234 ? 'one' : 'two')
    assert_equal('one', [0] ? 'one' : 'two')
    assert_equal('one', #{x: 0} ? 'one' : 'two')
!   var name = 1
!   assert_equal('one', name ? 'one' : 'two')
  
    assert_equal('two', false ? 'one' : 'two')
    assert_equal('two', 0 ? 'one' : 'two')
***************
*** 40,72 ****
    assert_equal('two', 0z ? 'one' : 'two')
    assert_equal('two', [] ? 'one' : 'two')
    assert_equal('two', {} ? 'one' : 'two')
!   var = 0
!   assert_equal('two', var ? 'one' : 'two')
  
    # with constant condition expression is not evaluated 
    assert_equal('one', 1 ? 'one' : xxx)
  
!   let Some: func = function('len')
!   let Other: func = function('winnr')
!   let Res: func = g:atrue ? Some : Other
    assert_equal(function('len'), Res)
  
!   let RetOne: func(string): number = function('len')
!   let RetTwo: func(string): number = function('winnr')
!   let RetThat: func = g:atrue ? RetOne : RetTwo
    assert_equal(function('len'), RetThat)
  
!   let X = FuncOne
!   let Y = FuncTwo
!   let Z = g:cond ? FuncOne : FuncTwo
    assert_equal(123, Z(3))
  enddef
  
  def Test_expr1_vimscript()
    # check line continuation
!   let lines =<< trim END
        vim9script
!       let var = 1
                        ? 'yes'
                : 'no'
        assert_equal('yes', var)
--- 42,74 ----
    assert_equal('two', 0z ? 'one' : 'two')
    assert_equal('two', [] ? 'one' : 'two')
    assert_equal('two', {} ? 'one' : 'two')
!   name = 0
!   assert_equal('two', name ? 'one' : 'two')
  
    # with constant condition expression is not evaluated 
    assert_equal('one', 1 ? 'one' : xxx)
  
!   var Some: func = function('len')
!   var Other: func = function('winnr')
!   var Res: func = g:atrue ? Some : Other
    assert_equal(function('len'), Res)
  
!   var RetOne: func(string): number = function('len')
!   var RetTwo: func(string): number = function('winnr')
!   var RetThat: func = g:atrue ? RetOne : RetTwo
    assert_equal(function('len'), RetThat)
  
!   var X = FuncOne
!   var Y = FuncTwo
!   var Z = g:cond ? FuncOne : FuncTwo
    assert_equal(123, Z(3))
  enddef
  
  def Test_expr1_vimscript()
    # check line continuation
!   var lines =<< trim END
        vim9script
!       var var = 1
                        ? 'yes'
                : 'no'
        assert_equal('yes', var)
***************
*** 75,81 ****
  
    lines =<< trim END
        vim9script
!       let var = v:false
                        ? 'yes'
                : 'no'
        assert_equal('no', var)
--- 77,83 ----
  
    lines =<< trim END
        vim9script
!       var var = v:false
                        ? 'yes'
                : 'no'
        assert_equal('no', var)
***************
*** 84,90 ****
  
    lines =<< trim END
        vim9script
!       let var = v:false ?
                        'yes' :
                'no'
        assert_equal('no', var)
--- 86,92 ----
  
    lines =<< trim END
        vim9script
!       var var = v:false ?
                        'yes' :
                'no'
        assert_equal('no', var)
***************
*** 94,120 ****
    # check white space
    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)
    lines =<< trim END
        vim9script
!       let var = v:true ? 1 :2
    END
    CheckScriptFailure(lines, 'E1004:', 2)
  
--- 96,122 ----
    # check white space
    lines =<< trim END
        vim9script
!       var var = v:true?1:2
    END
    CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
!       var var = v:true? 1 : 2
    END
    CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
!       var var = v:true ?1 : 2
    END
    CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
!       var var = v:true ? 1: 2
    END
    CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
!       var var = v:true ? 1 :2
    END
    CheckScriptFailure(lines, 'E1004:', 2)
  
***************
*** 141,163 ****
  enddef
  
  func Test_expr1_fails()
!   call CheckDefFailure(["let x = 1 ? 'one'"], "Missing ':' after '?'", 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
  
--- 143,165 ----
  enddef
  
  func Test_expr1_fails()
!   call CheckDefFailure(["var x = 1 ? 'one'"], "Missing ':' after '?'", 1)
  
    let msg = "White space required before and after '?'"
!   call CheckDefFailure(["var x = 1? 'one' : 'two'"], msg, 1)
!   call CheckDefFailure(["var x = 1 ?'one' : 'two'"], msg, 1)
!   call CheckDefFailure(["var x = 1?'one' : 'two'"], msg, 1)
  
    let msg = "White space required before and after ':'"
!   call CheckDefFailure(["var x = 1 ? 'one': 'two'"], msg, 1)
!   call CheckDefFailure(["var x = 1 ? 'one' :'two'"], msg, 1)
!   call CheckDefFailure(["var x = 1 ? 'one':'two'"], msg, 1)
  
    " missing argument detected even when common type is used
    call CheckDefFailure([
!       \ 'var X = FuncOne',
!       \ 'var Y = FuncTwo',
!       \ 'var Z = g:cond ? FuncOne : FuncTwo',
        \ 'Z()'], 'E119:', 4)
  endfunc
  
***************
*** 199,207 ****
  
  def Test_expr2_vimscript()
    # check line continuation
!   let lines =<< trim END
        vim9script
!       let var = 0
                        || 1
        assert_equal(1, var)
    END
--- 201,209 ----
  
  def Test_expr2_vimscript()
    # check line continuation
!   var lines =<< trim END
        vim9script
!       var var = 0
                        || 1
        assert_equal(1, var)
    END
***************
*** 209,215 ****
  
    lines =<< trim END
        vim9script
!       let var = v:false
                        || v:true
                        || v:false
        assert_equal(v:true, var)
--- 211,217 ----
  
    lines =<< trim END
        vim9script
!       var var = v:false
                        || v:true
                        || v:false
        assert_equal(v:true, var)
***************
*** 218,224 ****
  
    lines =<< trim END
        vim9script
!       let var = v:false ||
                        v:true ||
                v:false
        assert_equal(v:true, var)
--- 220,226 ----
  
    lines =<< trim END
        vim9script
!       var var = v:false ||
                        v:true ||
                v:false
        assert_equal(v:true, var)
***************
*** 228,244 ****
    # check white space
    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)
    lines =<< trim END
        vim9script
!       let var = v:true|| v:true
    END
    CheckScriptFailure(lines, 'E1004:', 2)
  
--- 230,246 ----
    # check white space
    lines =<< trim END
        vim9script
!       var var = v:true||v:true
    END
    CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
!       var var = v:true ||v:true
    END
    CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
!       var var = v:true|| v:true
    END
    CheckScriptFailure(lines, 'E1004:', 2)
  
***************
*** 277,287 ****
  
  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 &&
--- 279,289 ----
  
  func Test_expr2_fails()
    let msg = "White space required before and after '||'"
!   call CheckDefFailure(["var x = 1||2"], msg, 1)
!   call CheckDefFailure(["var x = 1 ||2"], msg, 1)
!   call CheckDefFailure(["var x = 1|| 2"], msg, 1)
  
!   call CheckDefFailure(["var x = 1 || xxx"], 'E1001:', 1)
  endfunc
  
  " test &&
***************
*** 320,328 ****
  
  def Test_expr3_vimscript()
    # check line continuation
!   let lines =<< trim END
        vim9script
!       let var = 0
                        && 1
        assert_equal(0, var)
    END
--- 322,330 ----
  
  def Test_expr3_vimscript()
    # check line continuation
!   var lines =<< trim END
        vim9script
!       var var = 0
                        && 1
        assert_equal(0, var)
    END
***************
*** 330,336 ****
  
    lines =<< trim END
        vim9script
!       let var = v:true
                        && v:true
                        && v:true
        assert_equal(v:true, var)
--- 332,338 ----
  
    lines =<< trim END
        vim9script
!       var var = v:true
                        && v:true
                        && v:true
        assert_equal(v:true, var)
***************
*** 339,345 ****
  
    lines =<< trim END
        vim9script
!       let var = v:true &&
                        v:true &&
                        v:true
        assert_equal(v:true, var)
--- 341,347 ----
  
    lines =<< trim END
        vim9script
!       var var = v:true &&
                        v:true &&
                        v:true
        assert_equal(v:true, var)
***************
*** 349,365 ****
    # check white space
    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)
    lines =<< trim END
        vim9script
!       let var = v:true&& v:true
    END
    CheckScriptFailure(lines, 'E1004:', 2)
  
--- 351,367 ----
    # check white space
    lines =<< trim END
        vim9script
!       var var = v:true&&v:true
    END
    CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
!       var var = v:true &&v:true
    END
    CheckScriptFailure(lines, 'E1004:', 2)
    lines =<< trim END
        vim9script
!       var var = v:true&& v:true
    END
    CheckScriptFailure(lines, 'E1004:', 2)
  
***************
*** 402,410 ****
  
  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
--- 404,412 ----
  
  func Test_expr3_fails()
    let msg = "White space required before and after '&&'"
!   call CheckDefFailure(["var x = 1&&2"], msg, 1)
!   call CheckDefFailure(["var x = 1 &&2"], msg, 1)
!   call CheckDefFailure(["var x = 1&& 2"], msg, 1)
  endfunc
  
  " global variables to use for tests with the "any" type
***************
*** 425,432 ****
  
  " test == comperator
  def Test_expr4_equal()
!   let trueVar = true
!   let falseVar = false
    assert_equal(true, true == true)
    assert_equal(false, true ==
                        false)
--- 427,434 ----
  
  " test == comperator
  def Test_expr4_equal()
!   var trueVar = true
!   var falseVar = false
    assert_equal(true, true == true)
    assert_equal(false, true ==
                        false)
***************
*** 441,448 ****
    assert_equal(true, g:anone == v:none)
    assert_equal(false, v:none == g:anull)
  
!   let nr0 = 0
!   let nr61 = 61
    assert_equal(false, 2 == 0)
    assert_equal(false, 2 == nr0)
    assert_equal(true, 61 == 61)
--- 443,450 ----
    assert_equal(true, g:anone == v:none)
    assert_equal(false, v:none == g:anull)
  
!   var nr0 = 0
!   var nr61 = 61
    assert_equal(false, 2 == 0)
    assert_equal(false, 2 == nr0)
    assert_equal(true, 61 == 61)
***************
*** 451,457 ****
    assert_equal(false, 61 == g:anint)
  
    if has('float')
!     let ff = 0.3
      assert_equal(true, ff == 0.3)
      assert_equal(false, 0.4 == ff)
      assert_equal(true, 0.1 == g:afloat)
--- 453,459 ----
    assert_equal(false, 61 == g:anint)
  
    if has('float')
!     var ff = 0.3
      assert_equal(true, ff == 0.3)
      assert_equal(false, 0.4 == ff)
      assert_equal(true, 0.1 == g:afloat)
***************
*** 480,489 ****
    assert_equal(false, 'abc' ==# 'ABC')
    set noignorecase
  
!   CheckDefFailure(["let x = 'a' == xxx"], 'E1001:', 1)
!   CheckDefExecFailure(['let items: any', 'eval 1', 'eval 2', 'if items == 
[]', 'endif'], 'E691:', 4)
  
!   let bb = 0z3f
    assert_equal(true, 0z3f == bb)
    assert_equal(false, bb == 0z4f)
    assert_equal(true, g:ablob == 0z01ab)
--- 482,491 ----
    assert_equal(false, 'abc' ==# 'ABC')
    set noignorecase
  
!   CheckDefFailure(["var x = 'a' == xxx"], 'E1001:', 1)
!   CheckDefExecFailure(['var items: any', 'eval 1', 'eval 2', 'if items == 
[]', 'endif'], 'E691:', 4)
  
!   var bb = 0z3f
    assert_equal(true, 0z3f == bb)
    assert_equal(false, bb == 0z4f)
    assert_equal(true, g:ablob == 0z01ab)
***************
*** 510,517 ****
    assert_equal(false, function('g:Test_expr4_equal', [123]) == 
function('g:Test_expr4_is', [123]))
    assert_equal(false, function('g:Test_expr4_equal', [123]) == 
function('g:Test_expr4_equal', [999]))
  
!   let OneFunc: func
!   let TwoFunc: func
    OneFunc = function('len')
    TwoFunc = function('len')
    assert_equal(true, OneFunc('abc') == TwoFunc('123'))
--- 512,519 ----
    assert_equal(false, function('g:Test_expr4_equal', [123]) == 
function('g:Test_expr4_is', [123]))
    assert_equal(false, function('g:Test_expr4_equal', [123]) == 
function('g:Test_expr4_equal', [999]))
  
!   var OneFunc: func
!   var TwoFunc: func
    OneFunc = function('len')
    TwoFunc = function('len')
    assert_equal(true, OneFunc('abc') == TwoFunc('123'))
***************
*** 519,526 ****
  
  " test != comperator
  def Test_expr4_notequal()
!   let trueVar = true
!   let falseVar = false
    assert_equal(false, true != true)
    assert_equal(true, true !=
                        false)
--- 521,528 ----
  
  " test != comperator
  def Test_expr4_notequal()
!   var trueVar = true
!   var falseVar = false
    assert_equal(false, true != true)
    assert_equal(true, true !=
                        false)
***************
*** 535,542 ****
    assert_equal(false, g:anone != v:none)
    assert_equal(true, v:none != g:anull)
  
!   let nr55 = 55
!   let nr0 = 55
    assert_equal(true, 2 != 0)
    assert_equal(true, 2 != nr0)
    assert_equal(false, 55 != 55)
--- 537,544 ----
    assert_equal(false, g:anone != v:none)
    assert_equal(true, v:none != g:anull)
  
!   var nr55 = 55
!   var nr0 = 55
    assert_equal(true, 2 != 0)
    assert_equal(true, 2 != nr0)
    assert_equal(false, 55 != 55)
***************
*** 545,551 ****
    assert_equal(true, 61 != g:anint)
  
    if has('float')
!     let ff = 0.3
      assert_equal(false, 0.3 != ff)
      assert_equal(true, 0.4 != ff)
      assert_equal(false, 0.1 != g:afloat)
--- 547,553 ----
    assert_equal(true, 61 != g:anint)
  
    if has('float')
!     var ff = 0.3
      assert_equal(false, 0.3 != ff)
      assert_equal(true, 0.4 != ff)
      assert_equal(false, 0.1 != g:afloat)
***************
*** 569,575 ****
    assert_equal(true, 'abc' != 'ABC')
    set noignorecase
  
!   let bb = 0z3f
    assert_equal(false, 0z3f != bb)
    assert_equal(true, bb != 0z4f)
    assert_equal(false, g:ablob != 0z01ab)
--- 571,577 ----
    assert_equal(true, 'abc' != 'ABC')
    set noignorecase
  
!   var bb = 0z3f
    assert_equal(false, 0z3f != bb)
    assert_equal(true, bb != 0z4f)
    assert_equal(false, g:ablob != 0z01ab)
***************
*** 604,610 ****
                1)
    assert_false(2 > 2)
    assert_false(2 > 3)
!   let nr2 = 2
    assert_true(nr2 > 0)
    assert_true(nr2 >
                1)
--- 606,612 ----
                1)
    assert_false(2 > 2)
    assert_false(2 > 3)
!   var nr2 = 2
    assert_true(nr2 > 0)
    assert_true(nr2 >
                1)
***************
*** 612,618 ****
    assert_false(nr2
                    > 3)
    if has('float')
!     let ff = 2.0
      assert_true(ff > 0.0)
      assert_true(ff > 1.0)
      assert_false(ff > 2.0)
--- 614,620 ----
    assert_false(nr2
                    > 3)
    if has('float')
!     var ff = 2.0
      assert_true(ff > 0.0)
      assert_true(ff > 1.0)
      assert_false(ff > 2.0)
***************
*** 626,637 ****
    assert_true(2 >=
                        2)
    assert_false(2 >= 3)
!   let nr2 = 2
    assert_true(nr2 >= 0)
    assert_true(nr2 >= 2)
    assert_false(nr2 >= 3)
    if has('float')
!     let ff = 2.0
      assert_true(ff >= 0.0)
      assert_true(ff >= 2.0)
      assert_false(ff >= 3.0)
--- 628,639 ----
    assert_true(2 >=
                        2)
    assert_false(2 >= 3)
!   var nr2 = 2
    assert_true(nr2 >= 0)
    assert_true(nr2 >= 2)
    assert_false(nr2 >= 3)
    if has('float')
!     var ff = 2.0
      assert_true(ff >= 0.0)
      assert_true(ff >= 2.0)
      assert_false(ff >= 3.0)
***************
*** 645,656 ****
                        2)
    assert_true(2
                < 3)
!   let nr2 = 2
    assert_false(nr2 < 0)
    assert_false(nr2 < 2)
    assert_true(nr2 < 3)
    if has('float')
!     let ff = 2.0
      assert_false(ff < 0.0)
      assert_false(ff < 2.0)
      assert_true(ff < 3.0)
--- 647,658 ----
                        2)
    assert_true(2
                < 3)
!   var nr2 = 2
    assert_false(nr2 < 0)
    assert_false(nr2 < 2)
    assert_true(nr2 < 3)
    if has('float')
!     var ff = 2.0
      assert_false(ff < 0.0)
      assert_false(ff < 2.0)
      assert_true(ff < 3.0)
***************
*** 665,677 ****
    assert_true(2
                <= 2)
    assert_true(2 <= 3)
!   let nr2 = 2
    assert_false(nr2 <= 0)
    assert_false(nr2 <= 1)
    assert_true(nr2 <= 2)
    assert_true(nr2 <= 3)
    if has('float')
!     let ff = 2.0
      assert_false(ff <= 0.0)
      assert_false(ff <= 1.0)
      assert_true(ff <= 2.0)
--- 667,679 ----
    assert_true(2
                <= 2)
    assert_true(2 <= 3)
!   var nr2 = 2
    assert_false(nr2 <= 0)
    assert_false(nr2 <= 1)
    assert_true(nr2 <= 2)
    assert_true(nr2 <= 3)
    if has('float')
!     var ff = 2.0
      assert_false(ff <= 0.0)
      assert_false(ff <= 1.0)
      assert_true(ff <= 2.0)
***************
*** 699,742 ****
  
  " test is comperator
  def Test_expr4_is()
!   let mylist = [2]
    assert_false(mylist is [2])
!   let other = mylist
    assert_true(mylist is
                other)
  
!   let myblob = 0z1234
    assert_false(myblob
                        is 0z1234)
!   let otherblob = myblob
    assert_true(myblob is otherblob)
  enddef
  
  " test isnot comperator
  def Test_expr4_isnot()
!   let mylist = [2]
    assert_true('2' isnot '0')
    assert_true(mylist isnot [2])
!   let other = mylist
    assert_false(mylist isnot
                        other)
  
!   let myblob = 0z1234
    assert_true(myblob
                isnot 0z1234)
!   let otherblob = myblob
    assert_false(myblob isnot otherblob)
  enddef
  
  def RetVoid()
!   let x = 1
  enddef
  
  def Test_expr4_vim9script()
    # check line continuation
!   let lines =<< trim END
        vim9script
!       let var = 0
                        < 1
        assert_equal(true, var)
    END
--- 701,744 ----
  
  " test is comperator
  def Test_expr4_is()
!   var mylist = [2]
    assert_false(mylist is [2])
!   var other = mylist
    assert_true(mylist is
                other)
  
!   var myblob = 0z1234
    assert_false(myblob
                        is 0z1234)
!   var otherblob = myblob
    assert_true(myblob is otherblob)
  enddef
  
  " test isnot comperator
  def Test_expr4_isnot()
!   var mylist = [2]
    assert_true('2' isnot '0')
    assert_true(mylist isnot [2])
!   var other = mylist
    assert_false(mylist isnot
                        other)
  
!   var myblob = 0z1234
    assert_true(myblob
                isnot 0z1234)
!   var otherblob = myblob
    assert_false(myblob isnot otherblob)
  enddef
  
  def RetVoid()
!   var x = 1
  enddef
  
  def Test_expr4_vim9script()
    # check line continuation
!   var lines =<< trim END
        vim9script
!       var var = 0
                        < 1
        assert_equal(true, var)
    END
***************
*** 744,750 ****
  
    lines =<< trim END
        vim9script
!       let var = 123
                        != 123
        assert_equal(false, var)
    END
--- 746,752 ----
  
    lines =<< trim END
        vim9script
!       var var = 123
                        != 123
        assert_equal(false, var)
    END
***************
*** 752,758 ****
  
    lines =<< trim END
        vim9script
!       let var = 123 ==
                                123
        assert_equal(true, var)
    END
--- 754,760 ----
  
    lines =<< trim END
        vim9script
!       var var = 123 ==
                                123
        assert_equal(true, var)
    END
***************
*** 760,778 ****
  
    lines =<< trim END
        vim9script
!       let list = [1, 2, 3]
!       let var = list
                        is list
!       assert_equal(true, var)
    END
    CheckScriptSuccess(lines)
  
    lines =<< trim END
        vim9script
!       let myblob = 0z1234
!       let var = myblob
                        isnot 0z11
!       assert_equal(true, var)
    END
    CheckScriptSuccess(lines)
  
--- 762,780 ----
  
    lines =<< trim END
        vim9script
!       var list = [1, 2, 3]
!       var name = list
                        is list
!       assert_equal(true, name)
    END
    CheckScriptSuccess(lines)
  
    lines =<< trim END
        vim9script
!       var myblob = 0z1234
!       var name = myblob
                        isnot 0z11
!       assert_equal(true, name)
    END
    CheckScriptSuccess(lines)
  
***************
*** 854,860 ****
  
    lines =<< trim END
      vim9script
!     let line = 'abc'
      echo line[1] =~ '\w'
    END
    CheckScriptSuccess(lines)
--- 856,862 ----
  
    lines =<< trim END
      vim9script
!     var line = 'abc'
      echo line[1] =~ '\w'
    END
    CheckScriptSuccess(lines)
***************
*** 862,932 ****
  
  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
--- 864,934 ----
  
  func Test_expr4_fails()
    let msg = "White space required before and after '>'"
!   call CheckDefFailure(["var x = 1>2"], msg, 1)
!   call CheckDefFailure(["var x = 1 >2"], msg, 1)
!   call CheckDefFailure(["var x = 1> 2"], msg, 1)
  
    let msg = "White space required before and after '=='"
!   call CheckDefFailure(["var x = 1==2"], msg, 1)
!   call CheckDefFailure(["var x = 1 ==2"], msg, 1)
!   call CheckDefFailure(["var x = 1== 2"], msg, 1)
  
    let msg = "White space required before and after 'is'"
!   call CheckDefFailure(["var x = '1'is'2'"], msg, 1)
!   call CheckDefFailure(["var x = '1' is'2'"], msg, 1)
!   call CheckDefFailure(["var x = '1'is '2'"], msg, 1)
  
    let msg = "White space required before and after 'isnot'"
!   call CheckDefFailure(["var x = '1'isnot'2'"], msg, 1)
!   call CheckDefFailure(["var x = '1' isnot'2'"], msg, 1)
!   call CheckDefFailure(["var x = '1'isnot '2'"], msg, 1)
! 
!   call CheckDefFailure(["var x = 1 is# 2"], 'E15:', 1)
!   call CheckDefFailure(["var x = 1 is? 2"], 'E15:', 1)
!   call CheckDefFailure(["var x = 1 isnot# 2"], 'E15:', 1)
!   call CheckDefFailure(["var x = 1 isnot? 2"], 'E15:', 1)
! 
!   call CheckDefFailure(["var x = 1 == '2'"], 'Cannot compare number with 
string', 1)
!   call CheckDefFailure(["var x = '1' == 2"], 'Cannot compare string with 
number', 1)
!   call CheckDefFailure(["var x = 1 == RetVoid()"], 'Cannot compare number 
with void', 1)
!   call CheckDefFailure(["var x = RetVoid() == 1"], 'Cannot compare void with 
number', 1)
! 
!   call CheckDefFailure(["var x = true > false"], 'Cannot compare bool with 
bool', 1)
!   call CheckDefFailure(["var x = true >= false"], 'Cannot compare bool with 
bool', 1)
!   call CheckDefFailure(["var x = true < false"], 'Cannot compare bool with 
bool', 1)
!   call CheckDefFailure(["var x = true <= false"], 'Cannot compare bool with 
bool', 1)
!   call CheckDefFailure(["var x = true =~ false"], 'Cannot compare bool with 
bool', 1)
!   call CheckDefFailure(["var x = true !~ false"], 'Cannot compare bool with 
bool', 1)
!   call CheckDefFailure(["var x = true is false"], 'Cannot use "is" with 
bool', 1)
!   call CheckDefFailure(["var x = true isnot false"], 'Cannot use "isnot" with 
bool', 1)
! 
!   call CheckDefFailure(["var x = v:none is v:null"], 'Cannot use "is" with 
special', 1)
!   call CheckDefFailure(["var x = v:none isnot v:null"], 'Cannot use "isnot" 
with special', 1)
!   call CheckDefFailure(["var x = 123 is 123"], 'Cannot use "is" with number', 
1)
!   call CheckDefFailure(["var x = 123 isnot 123"], 'Cannot use "isnot" with 
number', 1)
    if has('float')
!     call CheckDefFailure(["var x = 1.3 is 1.3"], 'Cannot use "is" with 
float', 1)
!     call CheckDefFailure(["var x = 1.3 isnot 1.3"], 'Cannot use "isnot" with 
float', 1)
    endif
  
!   call CheckDefFailure(["var x = 0za1 > 0z34"], 'Cannot compare blob with 
blob', 1)
!   call CheckDefFailure(["var x = 0za1 >= 0z34"], 'Cannot compare blob with 
blob', 1)
!   call CheckDefFailure(["var x = 0za1 < 0z34"], 'Cannot compare blob with 
blob', 1)
!   call CheckDefFailure(["var x = 0za1 <= 0z34"], 'Cannot compare blob with 
blob', 1)
!   call CheckDefFailure(["var x = 0za1 =~ 0z34"], 'Cannot compare blob with 
blob', 1)
!   call CheckDefFailure(["var x = 0za1 !~ 0z34"], 'Cannot compare blob with 
blob', 1)
! 
!   call CheckDefFailure(["var x = [13] > [88]"], 'Cannot compare list with 
list', 1)
!   call CheckDefFailure(["var x = [13] >= [88]"], 'Cannot compare list with 
list', 1)
!   call CheckDefFailure(["var x = [13] < [88]"], 'Cannot compare list with 
list', 1)
!   call CheckDefFailure(["var x = [13] <= [88]"], 'Cannot compare list with 
list', 1)
!   call CheckDefFailure(["var x = [13] =~ [88]"], 'Cannot compare list with 
list', 1)
!   call CheckDefFailure(["var x = [13] !~ [88]"], 'Cannot compare list with 
list', 1)
! 
!   call CheckDefFailure(['var j: job', 'var chan: channel', 'var r = j == 
chan'], 'Cannot compare job with channel', 3)
!   call CheckDefFailure(['var j: job', 'var x: list<any>', 'var r = j == x'], 
'Cannot compare job with list', 3)
!   call CheckDefFailure(['var j: job', 'var Xx: func', 'var r = j == Xx'], 
'Cannot compare job with func', 3)
!   call CheckDefFailure(['var j: job', 'var Xx: func', 'var r = j == Xx'], 
'Cannot compare job with func', 3)
  endfunc
  
  " test addition, subtraction, concatenation
***************
*** 970,976 ****
    assert_equal(0z01ab01ab, g:ablob + g:ablob)
  
    # concatenate non-constant to constant
!   let save_path = &path
    &path = 'b'
    assert_equal('ab', 'a' .. &path)
    &path = save_path
--- 972,978 ----
    assert_equal(0z01ab01ab, g:ablob + g:ablob)
  
    # concatenate non-constant to constant
!   var save_path = &path
    &path = 'b'
    assert_equal('ab', 'a' .. &path)
    &path = save_path
***************
*** 984,992 ****
  
  def Test_expr5_vim9script()
    # check line continuation
!   let lines =<< trim END
        vim9script
!       let var = 11
                        + 77
                - 22
        assert_equal(66, var)
--- 986,994 ----
  
  def Test_expr5_vim9script()
    # check line continuation
!   var lines =<< trim END
        vim9script
!       var var = 11
                        + 77
                - 22
        assert_equal(66, var)
***************
*** 995,1001 ****
  
    lines =<< trim END
        vim9script
!       let var = 11 +
                  77 -
                  22
        assert_equal(66, var)
--- 997,1003 ----
  
    lines =<< trim END
        vim9script
!       var var = 11 +
                  77 -
                  22
        assert_equal(66, var)
***************
*** 1004,1010 ****
  
    lines =<< trim END
        vim9script
!       let var = 'one'
                        .. 'two'
        assert_equal('onetwo', var)
    END
--- 1006,1012 ----
  
    lines =<< trim END
        vim9script
!       var var = 'one'
                        .. 'two'
        assert_equal('onetwo', var)
    END
***************
*** 1112,1118 ****
    if !has('channel')
      MissingFeature 'float'
    else
!     let lines =<< trim END
          vim9script
          echo 'a' .. test_null_job()
      END
--- 1114,1120 ----
    if !has('channel')
      MissingFeature 'float'
    else
!     var lines =<< trim END
          vim9script
          echo 'a' .. test_null_job()
      END
***************
*** 1152,1191 ****
  
  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)
  endfunc
  
  func Test_expr5_fails_channel()
    CheckFeature channel
!   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
--- 1154,1193 ----
  
  func Test_expr5_fails()
    let msg = "White space required before and after '+'"
!   call CheckDefFailure(["var x = 1+2"], msg, 1)
!   call CheckDefFailure(["var x = 1 +2"], msg, 1)
!   call CheckDefFailure(["var x = 1+ 2"], msg, 1)
  
    let msg = "White space required before and after '-'"
!   call CheckDefFailure(["var x = 1-2"], msg, 1)
!   call CheckDefFailure(["var x = 1 -2"], msg, 1)
!   call CheckDefFailure(["var x = 1- 2"], msg, 1)
  
    let msg = "White space required before and after '..'"
!   call CheckDefFailure(["var x = '1'..'2'"], msg, 1)
!   call CheckDefFailure(["var x = '1' ..'2'"], msg, 1)
!   call CheckDefFailure(["var x = '1'.. '2'"], msg, 1)
! 
!   call CheckDefFailure(["var x = 0z1122 + 33"], 'E1051', 1)
!   call CheckDefFailure(["var x = 0z1122 + [3]"], 'E1051', 1)
!   call CheckDefFailure(["var x = 0z1122 + 'asd'"], 'E1051', 1)
!   call CheckDefFailure(["var x = 33 + 0z1122"], 'E1051', 1)
!   call CheckDefFailure(["var x = [3] + 0z1122"], 'E1051', 1)
!   call CheckDefFailure(["var x = 'asdf' + 0z1122"], 'E1051', 1)
!   call CheckDefFailure(["var x = 6 + xxx"], 'E1001', 1)
! 
!   call CheckDefFailure(["var x = 'a' .. [1]"], 'E1105', 1)
!   call CheckDefFailure(["var x = 'a' .. #{a: 1}"], 'E1105', 1)
!   call CheckDefFailure(["var x = 'a' .. test_void()"], 'E1105', 1)
!   call CheckDefFailure(["var x = 'a' .. 0z32"], 'E1105', 1)
!   call CheckDefFailure(["var x = 'a' .. function('len')"], 'E1105', 1)
!   call CheckDefFailure(["var x = 'a' .. function('len', ['a'])"], 'E1105', 1)
  endfunc
  
  func Test_expr5_fails_channel()
    CheckFeature channel
!   call CheckDefFailure(["var x = 'a' .. test_null_job()"], 'E1105', 1)
!   call CheckDefFailure(["var x = 'a' .. test_null_channel()"], 'E1105', 1)
  endfunc
  
  " test multiply, divide, modulo
***************
*** 1213,1239 ****
  
    assert_equal(4, 6 * 4 / 6)
  
!   let x = [2]
!   let y = [3]
    assert_equal(5, x[0] + y[0])
    assert_equal(6, x[0] * y[0])
    if has('float')
!     let xf = [2.0]
!     let yf = [3.0]
      assert_equal(5.0, xf[0]
                        + yf[0])
      assert_equal(6.0, xf[0]
                        * yf[0])
    endif
  
!   CheckDefFailure(["let x = 6 * xxx"], 'E1001', 1)
  enddef
  
  def Test_expr6_vim9script()
    # check line continuation
!   let lines =<< trim END
        vim9script
!       let var = 11
                        * 22
                / 3
        assert_equal(80, var)
--- 1215,1241 ----
  
    assert_equal(4, 6 * 4 / 6)
  
!   var x = [2]
!   var y = [3]
    assert_equal(5, x[0] + y[0])
    assert_equal(6, x[0] * y[0])
    if has('float')
!     var xf = [2.0]
!     var yf = [3.0]
      assert_equal(5.0, xf[0]
                        + yf[0])
      assert_equal(6.0, xf[0]
                        * yf[0])
    endif
  
!   CheckDefFailure(["var x = 6 * xxx"], 'E1001', 1)
  enddef
  
  def Test_expr6_vim9script()
    # check line continuation
!   var lines =<< trim END
        vim9script
!       var var = 11
                        * 22
                / 3
        assert_equal(80, var)
***************
*** 1242,1248 ****
  
    lines =<< trim END
        vim9script
!       let var = 25
                        % 10
        assert_equal(5, var)
    END
--- 1244,1250 ----
  
    lines =<< trim END
        vim9script
!       var var = 25
                        % 10
        assert_equal(5, var)
    END
***************
*** 1250,1256 ****
  
    lines =<< trim END
        vim9script
!       let var = 11 *
                        22 /
                3
        assert_equal(80, var)
--- 1252,1258 ----
  
    lines =<< trim END
        vim9script
!       var var = 11 *
                        22 /
                3
        assert_equal(80, var)
***************
*** 1307,1351 ****
  
  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
--- 1309,1353 ----
  
  func Test_expr6_fails()
    let msg = "White space required before and after '*'"
!   call CheckDefFailure(["var x = 1*2"], msg, 1)
!   call CheckDefFailure(["var x = 1 *2"], msg, 1)
!   call CheckDefFailure(["var x = 1* 2"], msg, 1)
  
    let msg = "White space required before and after '/'"
!   call CheckDefFailure(["var x = 1/2"], msg, 1)
!   call CheckDefFailure(["var x = 1 /2"], msg, 1)
!   call CheckDefFailure(["var x = 1/ 2"], msg, 1)
  
    let msg = "White space required before and after '%'"
!   call CheckDefFailure(["var x = 1%2"], msg, 1)
!   call CheckDefFailure(["var x = 1 %2"], msg, 1)
!   call CheckDefFailure(["var x = 1% 2"], msg, 1)
! 
!   call CheckDefFailure(["var x = '1' * '2'"], 'E1036:', 1)
!   call CheckDefFailure(["var x = '1' / '2'"], 'E1036:', 1)
!   call CheckDefFailure(["var x = '1' % '2'"], 'E1035:', 1)
! 
!   call CheckDefFailure(["var x = 0z01 * 0z12"], 'E1036:', 1)
!   call CheckDefFailure(["var x = 0z01 / 0z12"], 'E1036:', 1)
!   call CheckDefFailure(["var x = 0z01 % 0z12"], 'E1035:', 1)
! 
!   call CheckDefFailure(["var x = [1] * [2]"], 'E1036:', 1)
!   call CheckDefFailure(["var x = [1] / [2]"], 'E1036:', 1)
!   call CheckDefFailure(["var x = [1] % [2]"], 'E1035:', 1)
! 
!   call CheckDefFailure(["var x = #{one: 1} * #{two: 2}"], 'E1036:', 1)
!   call CheckDefFailure(["var x = #{one: 1} / #{two: 2}"], 'E1036:', 1)
!   call CheckDefFailure(["var x = #{one: 1} % #{two: 2}"], 'E1035:', 1)
  
!   call CheckDefFailure(["var x = 0xff[1]"], 'E1107:', 1)
    if has('float')
!     call CheckDefFailure(["var x = 0.7[1]"], 'E1107:', 1)
    endif
  endfunc
  
  func Test_expr6_float_fails()
    CheckFeature float
!   call CheckDefFailure(["var x = 1.0 % 2"], 'E1035:', 1)
  endfunc
  
  " define here to use old style parsing
***************
*** 1378,1391 ****
  
  " type casts
  def Test_expr7t()
!   let ls: list<string> = ['a', <string>g:string_empty]
!   let ln: list<number> = [<number>g:anint, <number>g:thefour]
!   let nr = <number>234
    assert_equal(234, nr)
  
!   CheckDefFailure(["let x = <nr>123"], 'E1010:', 1)
!   CheckDefFailure(["let x = <number >123"], 'E1068:', 1)
!   CheckDefFailure(["let x = <number 123"], 'E1104:', 1)
  enddef
  
  " test low level expression
--- 1380,1393 ----
  
  " type casts
  def Test_expr7t()
!   var ls: list<string> = ['a', <string>g:string_empty]
!   var ln: list<number> = [<number>g:anint, <number>g:thefour]
!   var nr = <number>234
    assert_equal(234, nr)
  
!   CheckDefFailure(["var x = <nr>123"], 'E1010:', 1)
!   CheckDefFailure(["var x = <number >123"], 'E1068:', 1)
!   CheckDefFailure(["var x = <number 123"], 'E1104:', 1)
  enddef
  
  " test low level expression
***************
*** 1417,1423 ****
    assert_equal(g:blob_one, 0z01)
    assert_equal(g:blob_long, 0z0102.0304)
  
!   CheckDefFailure(["let x = 0z123"], 'E973:', 1)
  enddef
  
  def Test_expr7_string()
--- 1419,1425 ----
    assert_equal(g:blob_one, 0z01)
    assert_equal(g:blob_long, 0z0102.0304)
  
!   CheckDefFailure(["var x = 0z123"], 'E973:', 1)
  enddef
  
  def Test_expr7_string()
***************
*** 1430,1447 ****
    assert_equal(g:string_long, "abcdefghijklm")
    assert_equal(g:string_special, "ab\ncd\ref\ekk")
  
!   CheckDefFailure(['let x = "abc'], 'E114:', 1)
!   CheckDefFailure(["let x = 'abc"], 'E115:', 1)
  enddef
  
  def Test_expr7_vimvar()
!   let old: list<string> = v:oldfiles
!   let compl: dict<any> = v:completed_item
  
!   CheckDefFailure(["let old: list<number> = v:oldfiles"], 'E1012: Type 
mismatch; expected list<number> but got list<string>', 1)
    new
    exec "normal! afoo fo\<C-N>\<Esc>"
!   CheckDefExecFailure(["let old: dict<number> = v:completed_item"], 'E1012: 
Type mismatch; expected dict<number> but got dict<string>', 1)
    bwipe!
  enddef
  
--- 1432,1449 ----
    assert_equal(g:string_long, "abcdefghijklm")
    assert_equal(g:string_special, "ab\ncd\ref\ekk")
  
!   CheckDefFailure(['var x = "abc'], 'E114:', 1)
!   CheckDefFailure(["var x = 'abc"], 'E115:', 1)
  enddef
  
  def Test_expr7_vimvar()
!   var old: list<string> = v:oldfiles
!   var compl: dict<any> = v:completed_item
  
!   CheckDefFailure(["var old: list<number> = v:oldfiles"], 'E1012: Type 
mismatch; expected list<number> but got list<string>', 1)
    new
    exec "normal! afoo fo\<C-N>\<Esc>"
!   CheckDefExecFailure(["var old: dict<number> = v:completed_item"], 'E1012: 
Type mismatch; expected dict<number> but got dict<string>', 1)
    bwipe!
  enddef
  
***************
*** 1472,1481 ****
  enddef
  
  def Test_expr7_special_vim9script()
!   let lines =<< trim END
        vim9script
!       let t = true
!       let f = false
        assert_equal(v:true, true)
        assert_equal(true, t)
        assert_equal(v:false, false)
--- 1474,1483 ----
  enddef
  
  def Test_expr7_special_vim9script()
!   var lines =<< trim END
        vim9script
!       var t = true
!       var f = false
        assert_equal(v:true, true)
        assert_equal(true, t)
        assert_equal(v:false, false)
***************
*** 1497,1511 ****
    assert_equal(g:list_empty, [])
    assert_equal(g:list_empty, [  ])
  
!   let numbers: list<number> = [1, 2, 3]
    numbers = [1]
    numbers = []
  
!   let strings: list<string> = ['a', 'b', 'c']
    strings = ['x']
    strings = []
  
!   let mixed: list<any> = [1, 'b', false,]
    assert_equal(g:list_mixed, mixed)
    assert_equal('b', mixed[1])
  
--- 1499,1513 ----
    assert_equal(g:list_empty, [])
    assert_equal(g:list_empty, [  ])
  
!   var numbers: list<number> = [1, 2, 3]
    numbers = [1]
    numbers = []
  
!   var strings: list<string> = ['a', 'b', 'c']
    strings = ['x']
    strings = []
  
!   var mixed: list<any> = [1, 'b', false,]
    assert_equal(g:list_mixed, mixed)
    assert_equal('b', mixed[1])
  
***************
*** 1513,1519 ****
        2] [3,
                4]
  
!   let llstring: list<list<string>> = [['text'], []]
    llstring = [[], ['text']]
    llstring = [[], []]
  
--- 1515,1521 ----
        2] [3,
                4]
  
!   var llstring: list<list<string>> = [['text'], []]
    llstring = [[], ['text']]
    llstring = [[], []]
  
***************
*** 1521,1550 ****
    g:rangelist = range(3)
    CheckDefExecFailure(["var x: list<string> = g:rangelist"], 'E1012: Type 
mismatch; expected list<string> but got list<number>', 1)
  
!   CheckDefFailure(["let x = 1234[3]"], 'E1107:', 1)
!   CheckDefExecFailure(["let x = g:anint[3]"], 'E1062:', 1)
  
!   CheckDefFailure(["let x = g:list_mixed[xxx]"], 'E1001:', 1)
  
!   CheckDefFailure(["let x = [1,2,3]"], 'E1069:', 1)
!   CheckDefFailure(["let x = [1 ,2, 3]"], 'E1068:', 1)
  
!   CheckDefExecFailure(["echo 1", "let x = [][0]", "echo 3"], 'E684:', 2)
! 
!   CheckDefExecFailure(["let x = g:list_mixed['xx']"], 'E1012:', 1)
!   CheckDefFailure(["let x = g:list_mixed["], 'E1097:', 2)
!   CheckDefFailure(["let x = g:list_mixed[0"], 'E1097:', 2)
!   CheckDefExecFailure(["let x = g:list_empty[3]"], 'E684:', 1)
!   CheckDefExecFailure(["let l: list<number> = [234, 'x']"], 'E1012:', 1)
!   CheckDefExecFailure(["let l: list<number> = ['x', 234]"], 'E1012:', 1)
!   CheckDefExecFailure(["let l: list<string> = [234, 'x']"], 'E1012:', 1)
!   CheckDefExecFailure(["let l: list<string> = ['x', 123]"], 'E1012:', 1)
  enddef
  
  def Test_expr7_list_vim9script()
!   let lines =<< trim END
        vim9script
!       let l = [
                11,
                22,
                ]
--- 1523,1552 ----
    g:rangelist = range(3)
    CheckDefExecFailure(["var x: list<string> = g:rangelist"], 'E1012: Type 
mismatch; expected list<string> but got list<number>', 1)
  
!   CheckDefFailure(["var x = 1234[3]"], 'E1107:', 1)
!   CheckDefExecFailure(["var x = g:anint[3]"], 'E1062:', 1)
  
!   CheckDefFailure(["var x = g:list_mixed[xxx]"], 'E1001:', 1)
  
!   CheckDefFailure(["var x = [1,2,3]"], 'E1069:', 1)
!   CheckDefFailure(["var x = [1 ,2, 3]"], 'E1068:', 1)
  
!   CheckDefExecFailure(["echo 1", "var x = [][0]", "echo 3"], 'E684:', 2)
! 
!   CheckDefExecFailure(["var x = g:list_mixed['xx']"], 'E1012:', 1)
!   CheckDefFailure(["var x = g:list_mixed["], 'E1097:', 2)
!   CheckDefFailure(["var x = g:list_mixed[0"], 'E1097:', 2)
!   CheckDefExecFailure(["var x = g:list_empty[3]"], 'E684:', 1)
!   CheckDefExecFailure(["var l: list<number> = [234, 'x']"], 'E1012:', 1)
!   CheckDefExecFailure(["var l: list<number> = ['x', 234]"], 'E1012:', 1)
!   CheckDefExecFailure(["var l: list<string> = [234, 'x']"], 'E1012:', 1)
!   CheckDefExecFailure(["var l: list<string> = ['x', 123]"], 'E1012:', 1)
  enddef
  
  def Test_expr7_list_vim9script()
!   var lines =<< trim END
        vim9script
!       var l = [
                11,
                22,
                ]
***************
*** 1558,1564 ****
  
    lines =<< trim END
        vim9script
!       let l = [11,
                22]
        assert_equal([11, 22], l)
    END
--- 1560,1566 ----
  
    lines =<< trim END
        vim9script
!       var l = [11,
                22]
        assert_equal([11, 22], l)
    END
***************
*** 1566,1599 ****
  
    lines =<< trim END
        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
--- 1568,1601 ----
  
    lines =<< trim END
        vim9script
!       var l = [11,22]
    END
    CheckScriptFailure(lines, 'E1069:', 2)
  
    lines =<< trim END
        vim9script
!       var l = [11 , 22]
    END
    CheckScriptFailure(lines, 'E1068:', 2)
  
    lines =<< trim END
      vim9script
!     var l: list<number> = [234, 'x']
    END
    CheckScriptFailure(lines, 'E1012:', 2)
    lines =<< trim END
      vim9script
!     var l: list<number> = ['x', 234]
    END
    CheckScriptFailure(lines, 'E1012:', 2)
    lines =<< trim END
      vim9script
!     var l: list<string> = ['x', 234]
    END
    CheckScriptFailure(lines, 'E1012:', 2)
    lines =<< trim END
      vim9script
!     var l: list<string> = [234, 'x']
    END
    CheckScriptFailure(lines, 'E1012:', 2)
  enddef
***************
*** 1619,1630 ****
  enddef
  
  def Test_expr7_lambda()
!   let La = { -> 'result'}
    assert_equal('result', La())
    assert_equal([1, 3, 5], [1, 2, 3]->map({key, val -> key + val}))
  
    # line continuation inside lambda with "cond ? expr : expr" works
!   let ll = range(3)
    map(ll, {k, v -> v % 2 ? {
            '111': 111 } : {}
        })
--- 1621,1632 ----
  enddef
  
  def Test_expr7_lambda()
!   var La = { -> 'result'}
    assert_equal('result', La())
    assert_equal([1, 3, 5], [1, 2, 3]->map({key, val -> key + val}))
  
    # line continuation inside lambda with "cond ? expr : expr" works
!   var ll = range(3)
    map(ll, {k, v -> v % 2 ? {
            '111': 111 } : {}
        })
***************
*** 1644,1650 ****
        })
    assert_equal([111, 222, 111], ll)
  
!   let dl = [{'key': 0}, {'key': 22}]->filter({ _, v -> v['key'] })
    assert_equal([{'key': 22}], dl)
  
    dl = [{'key': 12}, {'foo': 34}]
--- 1646,1652 ----
        })
    assert_equal([111, 222, 111], ll)
  
!   var dl = [{'key': 0}, {'key': 22}]->filter({ _, v -> v['key'] })
    assert_equal([{'key': 22}], dl)
  
    dl = [{'key': 12}, {'foo': 34}]
***************
*** 1661,1681 ****
  
    CheckDefFailure(["filter([1, 2], {k,v -> 1})"], 'E1069:', 1)
    # error is in first line of the lambda
!   CheckDefFailure(["let L = {a -> a + b}"], 'E1001:', 0)
  
    assert_equal('xxxyyy', 'xxx'->{a, b -> a .. b}('yyy'))
  
!   CheckDefExecFailure(["let s = 'asdf'->{a -> a}('x')"],
          '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()
!   let lines =<< trim END
        vim9script
!       let v = 10->{a ->
            a
              + 2
          }()
--- 1663,1683 ----
  
    CheckDefFailure(["filter([1, 2], {k,v -> 1})"], 'E1069:', 1)
    # error is in first line of the lambda
!   CheckDefFailure(["var L = {a -> a + b}"], 'E1001:', 0)
  
    assert_equal('xxxyyy', 'xxx'->{a, b -> a .. b}('yyy'))
  
!   CheckDefExecFailure(["var s = 'asdf'->{a -> a}('x')"],
          'E1106: One argument too many')
!   CheckDefExecFailure(["var 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()
!   var lines =<< trim END
        vim9script
!       var v = 10->{a ->
            a
              + 2
          }()
***************
*** 1694,1704 ****
  enddef
  
  def Test_epxr7_funcref()
!   let lines =<< trim END
      def RetNumber(): number
        return 123
      enddef
!     let FuncRef = RetNumber
      assert_equal(123, FuncRef())
    END
    CheckDefAndScriptSuccess(lines)
--- 1696,1706 ----
  enddef
  
  def Test_epxr7_funcref()
!   var lines =<< trim END
      def RetNumber(): number
        return 123
      enddef
!     var FuncRef = RetNumber
      assert_equal(123, FuncRef())
    END
    CheckDefAndScriptSuccess(lines)
***************
*** 1709,1765 ****
    assert_equal(g:dict_empty, {})
    assert_equal(g:dict_empty, {  })
    assert_equal(g:dict_one, {'one': 1})
!   let key = 'one'
!   let val = 1
    assert_equal(g:dict_one, {key: val})
  
!   let numbers: dict<number> = #{a: 1, b: 2, c: 3}
    numbers = #{a: 1}
    numbers = #{}
  
!   let strings: dict<string> = #{a: 'a', b: 'b', c: 'c'}
    strings = #{a: 'x'}
    strings = #{}
  
!   let mixed: dict<any> = #{a: 'a', b: 42}
    mixed = #{a: 'x'}
    mixed = #{a: 234}
    mixed = #{}
  
!   let dictlist: dict<list<string>> = #{absent: [], present: ['hi']}
    dictlist = #{absent: ['hi'], present: []}
    dictlist = #{absent: [], present: []}
  
!   let dictdict: dict<dict<string>> = #{one: #{a: 'text'}, two: #{}}
    dictdict = #{one: #{}, two: #{a: 'text'}}
    dictdict = #{one: #{}, two: #{}}
   
!   CheckDefFailure(["let x = #{a:8}"], 'E1069:', 1)
!   CheckDefFailure(["let x = #{a : 8}"], 'E1068:', 1)
!   CheckDefFailure(["let x = #{a :8}"], 'E1068:', 1)
!   CheckDefFailure(["let x = #{a: 8 , b: 9}"], 'E1068:', 1)
! 
!   CheckDefFailure(["let x = #{8: 8}"], 'E1014:', 1)
!   CheckDefFailure(["let x = #{xxx}"], 'E720:', 1)
!   CheckDefFailure(["let x = #{xxx: 1", "let y = 2"], 'E722:', 2)
!   CheckDefFailure(["let x = #{xxx: 1,"], 'E723:', 2)
!   CheckDefFailure(["let x = {'a': xxx}"], 'E1001:', 1)
!   CheckDefFailure(["let x = {xxx: 8}"], 'E1001:', 1)
!   CheckDefFailure(["let x = #{a: 1, a: 2}"], 'E721:', 1)
!   CheckDefFailure(["let x = #"], 'E1015:', 1)
!   CheckDefExecFailure(["let x = g:anint.member"], 'E715:', 1)
!   CheckDefExecFailure(["let x = g:dict_empty.member"], 'E716:', 1)
! 
!   CheckDefExecFailure(['let x: dict<number> = #{a: 234, b: "1"}'], 'E1012:', 
1)
!   CheckDefExecFailure(['let x: dict<number> = #{a: "x", b: 134}'], 'E1012:', 
1)
!   CheckDefExecFailure(['let x: dict<string> = #{a: 234, b: "1"}'], 'E1012:', 
1)
!   CheckDefExecFailure(['let x: dict<string> = #{a: "x", b: 134}'], 'E1012:', 
1)
  enddef
  
  def Test_expr7_dict_vim9script()
!   let lines =<< trim END
        vim9script
!       let d = {
                'one':
                   1,
                'two': 2,
--- 1711,1767 ----
    assert_equal(g:dict_empty, {})
    assert_equal(g:dict_empty, {  })
    assert_equal(g:dict_one, {'one': 1})
!   var key = 'one'
!   var val = 1
    assert_equal(g:dict_one, {key: val})
  
!   var numbers: dict<number> = #{a: 1, b: 2, c: 3}
    numbers = #{a: 1}
    numbers = #{}
  
!   var strings: dict<string> = #{a: 'a', b: 'b', c: 'c'}
    strings = #{a: 'x'}
    strings = #{}
  
!   var mixed: dict<any> = #{a: 'a', b: 42}
    mixed = #{a: 'x'}
    mixed = #{a: 234}
    mixed = #{}
  
!   var dictlist: dict<list<string>> = #{absent: [], present: ['hi']}
    dictlist = #{absent: ['hi'], present: []}
    dictlist = #{absent: [], present: []}
  
!   var dictdict: dict<dict<string>> = #{one: #{a: 'text'}, two: #{}}
    dictdict = #{one: #{}, two: #{a: 'text'}}
    dictdict = #{one: #{}, two: #{}}
   
!   CheckDefFailure(["var x = #{a:8}"], 'E1069:', 1)
!   CheckDefFailure(["var x = #{a : 8}"], 'E1068:', 1)
!   CheckDefFailure(["var x = #{a :8}"], 'E1068:', 1)
!   CheckDefFailure(["var x = #{a: 8 , b: 9}"], 'E1068:', 1)
! 
!   CheckDefFailure(["var x = #{8: 8}"], 'E1014:', 1)
!   CheckDefFailure(["var x = #{xxx}"], 'E720:', 1)
!   CheckDefFailure(["var x = #{xxx: 1", "var y = 2"], 'E722:', 2)
!   CheckDefFailure(["var x = #{xxx: 1,"], 'E723:', 2)
!   CheckDefFailure(["var x = {'a': xxx}"], 'E1001:', 1)
!   CheckDefFailure(["var x = {xxx: 8}"], 'E1001:', 1)
!   CheckDefFailure(["var x = #{a: 1, a: 2}"], 'E721:', 1)
!   CheckDefFailure(["var x = #"], 'E1015:', 1)
!   CheckDefExecFailure(["var x = g:anint.member"], 'E715:', 1)
!   CheckDefExecFailure(["var x = g:dict_empty.member"], 'E716:', 1)
! 
!   CheckDefExecFailure(['var x: dict<number> = #{a: 234, b: "1"}'], 'E1012:', 
1)
!   CheckDefExecFailure(['var x: dict<number> = #{a: "x", b: 134}'], 'E1012:', 
1)
!   CheckDefExecFailure(['var x: dict<string> = #{a: 234, b: "1"}'], 'E1012:', 
1)
!   CheckDefExecFailure(['var x: dict<string> = #{a: "x", b: 134}'], 'E1012:', 
1)
  enddef
  
  def Test_expr7_dict_vim9script()
!   var lines =<< trim END
        vim9script
!       var d = {
                'one':
                   1,
                'two': 2,
***************
*** 1770,1783 ****
  
    lines =<< trim END
        vim9script
!       let d = { "one": "one", "two": "two", }
        assert_equal({'one': 'one', 'two': 'two'}, d)
    END
    CheckScriptSuccess(lines)
  
    lines =<< trim END
        vim9script
!       let d = #{one: 1,
                two: 2,
               }
        assert_equal({'one': 1, 'two': 2}, d)
--- 1772,1785 ----
  
    lines =<< trim END
        vim9script
!       var d = { "one": "one", "two": "two", }
        assert_equal({'one': 'one', 'two': 'two'}, d)
    END
    CheckScriptSuccess(lines)
  
    lines =<< trim END
        vim9script
!       var d = #{one: 1,
                two: 2,
               }
        assert_equal({'one': 1, 'two': 2}, d)
***************
*** 1786,1837 ****
  
    lines =<< trim END
        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
--- 1788,1839 ----
  
    lines =<< trim END
        vim9script
!       var d = #{one:1, two: 2}
    END
    CheckScriptFailure(lines, 'E1069:', 2)
  
    lines =<< trim END
        vim9script
!       var d = #{one: 1,two: 2}
    END
    CheckScriptFailure(lines, 'E1069:', 2)
  
    lines =<< trim END
        vim9script
!       var d = #{one : 1}
    END
    CheckScriptFailure(lines, 'E1068:', 2)
  
    lines =<< trim END
        vim9script
!       var d = #{one:1}
    END
    CheckScriptFailure(lines, 'E1069:', 2)
  
    lines =<< trim END
        vim9script
!       var d = #{one: 1 , two: 2}
    END
    CheckScriptFailure(lines, 'E1068:', 2)
  
    lines =<< trim END
      vim9script
!     var l: dict<number> = #{a: 234, b: 'x'}
    END
    CheckScriptFailure(lines, 'E1012:', 2)
    lines =<< trim END
      vim9script
!     var l: dict<number> = #{a: 'x', b: 234}
    END
    CheckScriptFailure(lines, 'E1012:', 2)
    lines =<< trim END
      vim9script
!     var l: dict<string> = #{a: 'x', b: 234}
    END
    CheckScriptFailure(lines, 'E1012:', 2)
    lines =<< trim END
      vim9script
!     var l: dict<string> = #{a: 234, b: 'x'}
    END
    CheckScriptFailure(lines, 'E1012:', 2)
  enddef
***************
*** 1840,1846 ****
  
  def Test_expr_member()
    assert_equal(1, g:dict_one.one)
!   let d: dict<number> = g:dict_one
    assert_equal(1, d['one'])
    assert_equal(1, d[
                  'one'
--- 1842,1848 ----
  
  def Test_expr_member()
    assert_equal(1, g:dict_one.one)
!   var d: dict<number> = g:dict_one
    assert_equal(1, d['one'])
    assert_equal(1, d[
                  'one'
***************
*** 1857,1869 ****
    assert_equal('one', #{one: 'one'}.one)
    assert_equal('one', #{one: 'one'}[g:oneString])
  
!   CheckDefFailure(["let x = g:dict_one.#$!"], 'E1002:', 1)
!   CheckDefExecFailure(["let d: dict<any>", "echo d['a']"], 'E716:', 2)
!   CheckDefExecFailure(["let d: dict<number>", "d = g:list_empty"], 'E1012: 
Type mismatch; expected dict<number> but got list<unknown>', 2)
  enddef
  
  def Test_expr7_any_index_slice()
!   let lines =<< trim END
      # getting the one member should clear the list only after getting the item
      assert_equal('bbb', ['aaa', 'bbb', 'ccc'][1])
  
--- 1859,1871 ----
    assert_equal('one', #{one: 'one'}.one)
    assert_equal('one', #{one: 'one'}[g:oneString])
  
!   CheckDefFailure(["var x = g:dict_one.#$!"], 'E1002:', 1)
!   CheckDefExecFailure(["var d: dict<any>", "echo d['a']"], 'E716:', 2)
!   CheckDefExecFailure(["var d: dict<number>", "d = g:list_empty"], 'E1012: 
Type mismatch; expected dict<number> but got list<unknown>', 2)
  enddef
  
  def Test_expr7_any_index_slice()
!   var lines =<< trim END
      # getting the one member should clear the list only after getting the item
      assert_equal('bbb', ['aaa', 'bbb', 'ccc'][1])
  
***************
*** 1950,1958 ****
  enddef
  
  def Test_expr_member_vim9script()
!   let lines =<< trim END
        vim9script
!       let d = #{one:
                        'one',
                two: 'two',
                1: 1,
--- 1952,1960 ----
  enddef
  
  def Test_expr_member_vim9script()
!   var lines =<< trim END
        vim9script
!       var d = #{one:
                        'one',
                two: 'two',
                1: 1,
***************
*** 1972,1978 ****
  
    lines =<< trim END
        vim9script
!       let l = [1,
                  2,
                  3, 4
                  ]
--- 1974,1980 ----
  
    lines =<< trim END
        vim9script
!       var l = [1,
                  2,
                  3, 4
                  ]
***************
*** 2011,2024 ****
    assert_equal('testvar', $TESTVAR)
    assert_equal('', $ASDF_ASD_XXX)
  
!   CheckDefFailure(["let x = $$$"], 'E1002:', 1)
  enddef
  
  def Test_expr7_register()
    @a = 'register a'
    assert_equal('register a', @a)
  
!   let fname = expand('%')
    assert_equal(fname, @%)
  
    feedkeys(":echo 'some'\<CR>", "xt")
--- 2013,2026 ----
    assert_equal('testvar', $TESTVAR)
    assert_equal('', $ASDF_ASD_XXX)
  
!   CheckDefFailure(["var x = $$$"], 'E1002:', 1)
  enddef
  
  def Test_expr7_register()
    @a = 'register a'
    assert_equal('register a', @a)
  
!   var fname = expand('%')
    assert_equal(fname, @%)
  
    feedkeys(":echo 'some'\<CR>", "xt")
***************
*** 2076,2084 ****
  enddef
  
  def Test_expr7_parens_vim9script()
!   let lines =<< trim END
        vim9script
!       let s = (
                'one'
                ..
                'two'
--- 2078,2086 ----
  enddef
  
  def Test_expr7_parens_vim9script()
!   var lines =<< trim END
        vim9script
!       var s = (
                'one'
                ..
                'two'
***************
*** 2091,2097 ****
  def Test_expr7_negate()
    assert_equal(-99, -99)
    assert_equal(99, --99)
!   let nr = 88
    assert_equal(-88, -nr)
    assert_equal(88, --nr)
  enddef
--- 2093,2099 ----
  def Test_expr7_negate()
    assert_equal(-99, -99)
    assert_equal(99, --99)
!   var nr = 88
    assert_equal(-88, -nr)
    assert_equal(88, --nr)
  enddef
***************
*** 2111,2131 ****
    assert_equal(true, !range(5)->empty())
    assert_equal([0, 1, 2], --3->range())
  
!   CheckDefFailure(["let x = 'yes'->Echo"], 'E107:', 1)
    CheckScriptFailure([
     "vim9script",
!    "let x = substitute ('x', 'x', 'x', 'x')"
     ], 'E121:', 2)
!   CheckDefFailure(["let Ref = function('len' [1, 2])"], 'E1123:', 1)
  
!   let auto_lines =<< trim END
        def g:some#func(): string
        return 'found'
        enddef
    END
    mkdir('Xruntime/autoload', 'p')
    writefile(auto_lines, 'Xruntime/autoload/some.vim')
!   let save_rtp = &rtp
    &rtp = getcwd() .. '/Xruntime,' .. &rtp
    assert_equal('found', g:some#func())
    assert_equal('found', some#func())
--- 2113,2133 ----
    assert_equal(true, !range(5)->empty())
    assert_equal([0, 1, 2], --3->range())
  
!   CheckDefFailure(["var x = 'yes'->Echo"], 'E107:', 1)
    CheckScriptFailure([
     "vim9script",
!    "var x = substitute ('x', 'x', 'x', 'x')"
     ], 'E121:', 2)
!   CheckDefFailure(["var Ref = function('len' [1, 2])"], 'E1123:', 1)
  
!   var auto_lines =<< trim END
        def g:some#func(): string
        return 'found'
        enddef
    END
    mkdir('Xruntime/autoload', 'p')
    writefile(auto_lines, 'Xruntime/autoload/some.vim')
!   var save_rtp = &rtp
    &rtp = getcwd() .. '/Xruntime,' .. &rtp
    assert_equal('found', g:some#func())
    assert_equal('found', some#func())
***************
*** 2136,2142 ****
  
  
  def Test_expr7_not()
!   let lines =<< trim END
        assert_equal(true, !'')
        assert_equal(true, ![])
        assert_equal(false, !'asdf')
--- 2138,2144 ----
  
  
  def Test_expr7_not()
!   var lines =<< trim END
        assert_equal(true, !'')
        assert_equal(true, ![])
        assert_equal(false, !'asdf')
***************
*** 2171,2194 ****
  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)
--- 2173,2196 ----
  enddef
  
  func Test_expr7_fails()
!   call CheckDefFailure(["var x = (12"], "E110:", 1)
  
!   call CheckDefFailure(["var x = -'xx'"], "E1030:", 1)
!   call CheckDefFailure(["var x = +'xx'"], "E1030:", 1)
!   call CheckDefFailure(["var x = -0z12"], "E974:", 1)
!   call CheckDefExecFailure(["var x = -[8]"], "E39:", 1)
!   call CheckDefExecFailure(["var x = -{'a': 1}"], "E39:", 1)
  
!   call CheckDefFailure(["var x = @"], "E1002:", 1)
!   call CheckDefFailure(["var x = @<"], "E354:", 1)
  
!   call CheckDefFailure(["var x = [1, 2"], "E697:", 2)
!   call CheckDefFailure(["var x = [notfound]"], "E1001:", 1)
  
!   call CheckDefFailure(["var x = { -> 123) }"], "E451:", 1)
!   call CheckDefFailure(["var x = 123->{x -> x + 5) }"], "E451:", 1)
  
!   call CheckDefFailure(["var x = &notexist"], 'E113:', 1)
    call CheckDefFailure(["&grepprg = [343]"], 'E1012:', 1)
  
    call CheckDefExecFailure(["echo s:doesnt_exist"], 'E121:', 1)
***************
*** 2198,2209 ****
    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)
  
--- 2200,2211 ----
    call CheckDefFailure(["echo l:somevar"], 'E1075:', 1)
    call CheckDefFailure(["echo x:somevar"], 'E1075:', 1)
  
!   call CheckDefExecFailure(["var x = +g:astring"], 'E1030:', 1)
!   call CheckDefExecFailure(["var x = +g:ablob"], 'E974:', 1)
!   call CheckDefExecFailure(["var x = +g:alist"], 'E745:', 1)
!   call CheckDefExecFailure(["var x = +g:adict"], 'E728:', 1)
  
!   call CheckDefFailure(["var x = ''", "var y = x.memb"], 'E715:', 2)
  
    call CheckDefFailure(["'yes'->", "Echo()"], 'E488: Trailing characters: 
->', 1)
  
***************
*** 2232,2242 ****
    assert_equal('nothing', g:CallMe('nothing'))
  
    # partial call
!   let Part = function('g:CallMe')
    assert_equal('yes', Part('yes'))
  
    # funcref call, using list index
!   let l = []
    g:Funcrefs[0](l, 2)
    assert_equal([2], l)
  
--- 2234,2244 ----
    assert_equal('nothing', g:CallMe('nothing'))
  
    # partial call
!   var Part = function('g:CallMe')
    assert_equal('yes', Part('yes'))
  
    # funcref call, using list index
!   var l = []
    g:Funcrefs[0](l, 2)
    assert_equal([2], l)
  
***************
*** 2251,2263 ****
    assert_equal([2, 5, 8], l)
  
    # dict member
!   let d = #{key: 123}
    assert_equal(123, d.key)
  enddef
  
  def Test_expr7_string_subscript()
!   let lines =<< trim END
!     let text = 'abcdef'
      assert_equal('', text[-1])
      assert_equal('a', text[0])
      assert_equal('e', text[4])
--- 2253,2265 ----
    assert_equal([2, 5, 8], l)
  
    # dict member
!   var d = #{key: 123}
    assert_equal(123, d.key)
  enddef
  
  def Test_expr7_string_subscript()
!   var lines =<< trim END
!     var text = 'abcdef'
      assert_equal('', text[-1])
      assert_equal('a', text[0])
      assert_equal('e', text[4])
***************
*** 2303,2310 ****
  enddef
  
  def Test_expr7_list_subscript()
!   let lines =<< trim END
!     let list = [0, 1, 2, 3, 4]
      assert_equal(0, list[0])
      assert_equal(4, list[4])
      assert_equal(4, list[-1])
--- 2305,2312 ----
  enddef
  
  def Test_expr7_list_subscript()
!   var lines =<< trim END
!     var list = [0, 1, 2, 3, 4]
      assert_equal(0, list[0])
      assert_equal(4, list[4])
      assert_equal(4, list[-1])
***************
*** 2330,2354 ****
    CheckDefSuccess(lines)
    CheckScriptSuccess(['vim9script'] + lines)
  
!   lines = ['let l = [0, 1, 2]', 'echo l[g:astring : g:theone]']
    CheckDefExecFailure(lines, 'E1012:')
    CheckScriptFailure(['vim9script'] + lines, 'E1030:', 3)
  enddef
  
  def Test_expr7_dict_subscript()
!   let lines =<< trim END
        vim9script
!       let l = [#{lnum: 2}, #{lnum: 1}]
!       let res = l[0].lnum > l[1].lnum
        assert_true(res)
    END
    CheckScriptSuccess(lines)
  enddef
  
  def Test_expr7_subscript_linebreak()
!   let range = range(
                3)
!   let l = range
        ->map('string(v:key)')
    assert_equal(['0', '1', '2'], l)
  
--- 2332,2356 ----
    CheckDefSuccess(lines)
    CheckScriptSuccess(['vim9script'] + lines)
  
!   lines = ['var l = [0, 1, 2]', 'echo l[g:astring : g:theone]']
    CheckDefExecFailure(lines, 'E1012:')
    CheckScriptFailure(['vim9script'] + lines, 'E1030:', 3)
  enddef
  
  def Test_expr7_dict_subscript()
!   var lines =<< trim END
        vim9script
!       var l = [#{lnum: 2}, #{lnum: 1}]
!       var res = l[0].lnum > l[1].lnum
        assert_true(res)
    END
    CheckScriptSuccess(lines)
  enddef
  
  def Test_expr7_subscript_linebreak()
!   var range = range(
                3)
!   var l = range
        ->map('string(v:key)')
    assert_equal(['0', '1', '2'], l)
  
***************
*** 2373,2379 ****
    assert_equal('1', l[
        1])
  
!   let d = #{one: 33}
    assert_equal(33, d.
        one)
  enddef
--- 2375,2381 ----
    assert_equal('1', l[
        1])
  
!   var d = #{one: 33}
    assert_equal(33, d.
        one)
  enddef
***************
*** 2386,2393 ****
    assert_equal(['first', 'second', 'third', 'last'], getline(1, '$'))
    bwipe!
  
!   let bufnr = bufnr()
!   let loclist = [#{bufnr: bufnr, lnum: 42, col: 17, text: 'wrong'}]
    loclist->setloclist(0)
    assert_equal([#{bufnr: bufnr,
                lnum: 42,
--- 2388,2395 ----
    assert_equal(['first', 'second', 'third', 'last'], getline(1, '$'))
    bwipe!
  
!   var bufnr = bufnr()
!   var loclist = [#{bufnr: bufnr, lnum: 42, col: 17, text: 'wrong'}]
    loclist->setloclist(0)
    assert_equal([#{bufnr: bufnr,
                lnum: 42,
***************
*** 2401,2418 ****
                module: ''}
                ], getloclist(0))
  
!   let result: bool = get(#{n: 0}, 'n', 0)
    assert_equal(false, result)
  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 CheckScriptFailure(["CallMe ('yes')"], 'E492:', 1)
--- 2403,2420 ----
                module: ''}
                ], getloclist(0))
  
!   var result: bool = get(#{n: 0}, 'n', 0)
    assert_equal(false, result)
  enddef
  
  func Test_expr7_trailing_fails()
!   call CheckDefFailure(['var l = [2]', 'l->{l -> add(l, 8)}'], 'E107:', 2)
!   call CheckDefFailure(['var l = [2]', 'l->{l -> add(l, 8)} ()'], 'E274:', 2)
  endfunc
  
  func Test_expr_fails()
!   call CheckDefFailure(["var x = '1'is2"], 'E488:', 1)
!   call CheckDefFailure(["var x = '1'isnot2"], 'E488:', 1)
  
    call CheckDefFailure(["CallMe ('yes')"], 'E476:', 1)
    call CheckScriptFailure(["CallMe ('yes')"], 'E492:', 1)
***************
*** 2420,2427 ****
    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)
--- 2422,2429 ----
    call CheckDefFailure(["CallMe2('yes' , 'no')"], 'E1068:', 1)
  
    call CheckDefFailure(["v:nosuch += 3"], 'E1001:', 1)
!   call CheckDefFailure(["var v:statusmsg = ''"], 'E1016: Cannot declare a v: 
variable:', 1)
!   call CheckDefFailure(["var asdf = v:nosuch"], 'E1001:', 1)
  
    call CheckDefFailure(["echo len('asdf'"], 'E110:', 2)
    call CheckDefFailure(["echo 
Func0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789()"],
 'E1011:', 1)
*** ../vim-8.2.1758/src/version.c       2020-09-27 17:44:59.545923881 +0200
--- src/version.c       2020-09-27 17:56:33.048260124 +0200
***************
*** 752,753 ****
--- 752,755 ----
  {   /* Add new patch number below this line */
+ /**/
+     1759,
  /**/

-- 
A)bort, R)etry, P)lease don't bother me again

 /// 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/202009271559.08RFx37a189653%40masaka.moolenaar.net.

Raspunde prin e-mail lui