To: vim_dev@googlegroups.com Subject: Patch 8.2.1759 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ 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', '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', '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 = ['a', g:string_empty] ! let ln: list = [g:anint, g:thefour] ! let nr = 234 assert_equal(234, nr) ! CheckDefFailure(["let x = 123"], 'E1010:', 1) ! CheckDefFailure(["let x = 123"], 'E1068:', 1) ! CheckDefFailure(["let x = = ['a', g:string_empty] ! var ln: list = [g:anint, g:thefour] ! var nr = 234 assert_equal(234, nr) ! CheckDefFailure(["var x = 123"], 'E1010:', 1) ! CheckDefFailure(["var x = 123"], 'E1068:', 1) ! CheckDefFailure(["var x = = v:oldfiles ! let compl: dict = v:completed_item ! CheckDefFailure(["let old: list = v:oldfiles"], 'E1012: Type mismatch; expected list but got list', 1) new exec "normal! afoo fo\\" ! CheckDefExecFailure(["let old: dict = v:completed_item"], 'E1012: Type mismatch; expected dict but got dict', 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 = v:oldfiles ! var compl: dict = v:completed_item ! CheckDefFailure(["var old: list = v:oldfiles"], 'E1012: Type mismatch; expected list but got list', 1) new exec "normal! afoo fo\\" ! CheckDefExecFailure(["var old: dict = v:completed_item"], 'E1012: Type mismatch; expected dict but got dict', 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 = [1, 2, 3] numbers = [1] numbers = [] ! let strings: list = ['a', 'b', 'c'] strings = ['x'] strings = [] ! let mixed: list = [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 = [1, 2, 3] numbers = [1] numbers = [] ! var strings: list = ['a', 'b', 'c'] strings = ['x'] strings = [] ! var mixed: list = [1, 'b', false,] assert_equal(g:list_mixed, mixed) assert_equal('b', mixed[1]) *************** *** 1513,1519 **** 2] [3, 4] ! let llstring: list> = [['text'], []] llstring = [[], ['text']] llstring = [[], []] --- 1515,1521 ---- 2] [3, 4] ! var llstring: list> = [['text'], []] llstring = [[], ['text']] llstring = [[], []] *************** *** 1521,1550 **** g:rangelist = range(3) CheckDefExecFailure(["var x: list = g:rangelist"], 'E1012: Type mismatch; expected list but got list', 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 = [234, 'x']"], 'E1012:', 1) ! CheckDefExecFailure(["let l: list = ['x', 234]"], 'E1012:', 1) ! CheckDefExecFailure(["let l: list = [234, 'x']"], 'E1012:', 1) ! CheckDefExecFailure(["let l: list = ['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 = g:rangelist"], 'E1012: Type mismatch; expected list but got list', 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 = [234, 'x']"], 'E1012:', 1) ! CheckDefExecFailure(["var l: list = ['x', 234]"], 'E1012:', 1) ! CheckDefExecFailure(["var l: list = [234, 'x']"], 'E1012:', 1) ! CheckDefExecFailure(["var l: list = ['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 = [234, 'x'] END CheckScriptFailure(lines, 'E1012:', 2) lines =<< trim END vim9script ! let l: list = ['x', 234] END CheckScriptFailure(lines, 'E1012:', 2) lines =<< trim END vim9script ! let l: list = ['x', 234] END CheckScriptFailure(lines, 'E1012:', 2) lines =<< trim END vim9script ! let l: list = [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 = [234, 'x'] END CheckScriptFailure(lines, 'E1012:', 2) lines =<< trim END vim9script ! var l: list = ['x', 234] END CheckScriptFailure(lines, 'E1012:', 2) lines =<< trim END vim9script ! var l: list = ['x', 234] END CheckScriptFailure(lines, 'E1012:', 2) lines =<< trim END vim9script ! var l: list = [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 = #{a: 1, b: 2, c: 3} numbers = #{a: 1} numbers = #{} ! let strings: dict = #{a: 'a', b: 'b', c: 'c'} strings = #{a: 'x'} strings = #{} ! let mixed: dict = #{a: 'a', b: 42} mixed = #{a: 'x'} mixed = #{a: 234} mixed = #{} ! let dictlist: dict> = #{absent: [], present: ['hi']} dictlist = #{absent: ['hi'], present: []} dictlist = #{absent: [], present: []} ! let dictdict: dict> = #{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 = #{a: 234, b: "1"}'], 'E1012:', 1) ! CheckDefExecFailure(['let x: dict = #{a: "x", b: 134}'], 'E1012:', 1) ! CheckDefExecFailure(['let x: dict = #{a: 234, b: "1"}'], 'E1012:', 1) ! CheckDefExecFailure(['let x: dict = #{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 = #{a: 1, b: 2, c: 3} numbers = #{a: 1} numbers = #{} ! var strings: dict = #{a: 'a', b: 'b', c: 'c'} strings = #{a: 'x'} strings = #{} ! var mixed: dict = #{a: 'a', b: 42} mixed = #{a: 'x'} mixed = #{a: 234} mixed = #{} ! var dictlist: dict> = #{absent: [], present: ['hi']} dictlist = #{absent: ['hi'], present: []} dictlist = #{absent: [], present: []} ! var dictdict: dict> = #{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 = #{a: 234, b: "1"}'], 'E1012:', 1) ! CheckDefExecFailure(['var x: dict = #{a: "x", b: 134}'], 'E1012:', 1) ! CheckDefExecFailure(['var x: dict = #{a: 234, b: "1"}'], 'E1012:', 1) ! CheckDefExecFailure(['var x: dict = #{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 = #{a: 234, b: 'x'} END CheckScriptFailure(lines, 'E1012:', 2) lines =<< trim END vim9script ! let l: dict = #{a: 'x', b: 234} END CheckScriptFailure(lines, 'E1012:', 2) lines =<< trim END vim9script ! let l: dict = #{a: 'x', b: 234} END CheckScriptFailure(lines, 'E1012:', 2) lines =<< trim END vim9script ! let l: dict = #{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 = #{a: 234, b: 'x'} END CheckScriptFailure(lines, 'E1012:', 2) lines =<< trim END vim9script ! var l: dict = #{a: 'x', b: 234} END CheckScriptFailure(lines, 'E1012:', 2) lines =<< trim END vim9script ! var l: dict = #{a: 'x', b: 234} END CheckScriptFailure(lines, 'E1012:', 2) lines =<< trim END vim9script ! var l: dict = #{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 = 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 = 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", "echo d['a']"], 'E716:', 2) ! CheckDefExecFailure(["let d: dict", "d = g:list_empty"], 'E1012: Type mismatch; expected dict but got list', 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", "echo d['a']"], 'E716:', 2) ! CheckDefExecFailure(["var d: dict", "d = g:list_empty"], 'E1012: Type mismatch; expected dict but got list', 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'\", "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'\", "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 = ¬exist"], '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 = ¬exist"], '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 -- Bram@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 ///