Patch 8.2.1759

5 views
Skip to first unread message

Bram Moolenaar

unread,
Sep 27, 2020, 11:59:13 AM9/27/20
to vim...@googlegroups.com

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 -- Br...@Moolenaar.net -- 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 ///
Reply all
Reply to author
Forward
0 new messages