To: vim_dev@googlegroups.com Subject: Patch 8.2.1766 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.1766 Problem: Vim9: Some tests are still using :let. Solution: Change the last few declarations to use :var. Files: src/testdir/runtest.vim, src/testdir/test_vim9_assign.vim, src/testdir/test_vim9_cmd.vim, src/testdir/test_vim9_disassemble.vim, src/testdir/test_vim9_expr.vim, src/testdir/test_vim9_func.vim, src/testdir/test_vim9_script.vim, src/testdir/test_maparg.vim, src/testdir/test_popupwin.vim, src/testdir/test_textprop.vim *** ../vim-8.2.1765/src/testdir/runtest.vim 2020-08-31 21:30:28.994020232 +0200 --- src/testdir/runtest.vim 2020-09-27 22:12:21.378767736 +0200 *************** *** 355,360 **** --- 355,363 ---- qall! endfunc + " TODO: remove later + let v:disallow_let = 1 + " Source the test script. First grab the file name, in case the script " navigates away. g:testname can be used by the tests. let g:testname = expand('%') *** ../vim-8.2.1765/src/testdir/test_vim9_assign.vim 2020-09-27 21:58:42.153049879 +0200 --- src/testdir/test_vim9_assign.vim 2020-09-27 22:42:22.044910450 +0200 *************** *** 3,11 **** source check.vim source vim9.vim - " TODO: remove later - let v:disallow_let = 1 - let s:appendToMe = 'xxx' let s:addToMe = 111 let g:existing = 'yes' --- 3,8 ---- *** ../vim-8.2.1765/src/testdir/test_vim9_cmd.vim 2020-09-27 19:05:28.940098114 +0200 --- src/testdir/test_vim9_cmd.vim 2020-09-27 22:42:25.116901468 +0200 *************** *** 4,12 **** source vim9.vim source view_util.vim - " TODO: remove later - let v:disallow_let = 1 - def Test_edit_wildcards() var filename = 'Xtest' edit `=filename` --- 4,9 ---- *** ../vim-8.2.1765/src/testdir/test_vim9_disassemble.vim 2020-09-27 19:05:28.940098114 +0200 --- src/testdir/test_vim9_disassemble.vim 2020-09-27 22:42:28.348892000 +0200 *************** *** 2,10 **** source check.vim - " TODO: remove later - let v:disallow_let = 1 - func NotCompiled() echo "not" endfunc --- 2,7 ---- *** ../vim-8.2.1765/src/testdir/test_vim9_expr.vim 2020-09-27 21:58:42.153049879 +0200 --- src/testdir/test_vim9_expr.vim 2020-09-27 22:42:31.604882471 +0200 *************** *** 3,11 **** source check.vim source vim9.vim - " TODO: remove later - let v:disallow_let = 1 - let g:cond = v:false def FuncOne(arg: number): string return 'yes' --- 3,8 ---- *** ../vim-8.2.1765/src/testdir/test_vim9_func.vim 2020-09-26 19:59:34.097707443 +0200 --- src/testdir/test_vim9_func.vim 2020-09-27 22:42:34.280874641 +0200 *************** *** 88,94 **** enddef def MyVarargs(arg: string, ...rest: list): string ! let res = arg for s in rest res ..= ',' .. s endfor --- 88,94 ---- enddef def MyVarargs(arg: string, ...rest: list): string ! var res = arg for s in rest res ..= ',' .. s endfor *************** *** 160,166 **** endfunc def Test_nested_global_function() ! let lines =<< trim END vim9script def Outer() def g:Inner(): string --- 160,166 ---- endfunc def Test_nested_global_function() ! var lines =<< trim END vim9script def Outer() def g:Inner(): string *************** *** 209,215 **** enddef def Test_global_local_function() ! let lines =<< trim END vim9script def g:Func(): string return 'global' --- 209,215 ---- enddef def Test_global_local_function() ! var lines =<< trim END vim9script def g:Func(): string return 'global' *************** *** 233,245 **** enddef def Test_local_function_shadows_global() ! let lines =<< trim END vim9script def g:Gfunc(): string return 'global' enddef def AnotherFunc(): number ! let Gfunc = function('len') return Gfunc('testing') enddef g:Gfunc()->assert_equal('global') --- 233,245 ---- enddef def Test_local_function_shadows_global() ! var lines =<< trim END vim9script def g:Gfunc(): string return 'global' enddef def AnotherFunc(): number ! var Gfunc = function('len') return Gfunc('testing') enddef g:Gfunc()->assert_equal('global') *************** *** 272,278 **** CheckDefFailure(['bufnr(xxx)'], 'E1001:') CheckScriptFailure(['def Func(Ref: func(s: string))'], 'E475:') ! let lines =<< trim END vim9script def Func(s: string) echo s --- 272,278 ---- CheckDefFailure(['bufnr(xxx)'], 'E1001:') CheckScriptFailure(['def Func(Ref: func(s: string))'], 'E475:') ! var lines =<< trim END vim9script def Func(s: string) echo s *************** *** 292,298 **** defcompile END writefile(lines, 'Xscript') ! let didCatch = false try source Xscript catch --- 292,298 ---- defcompile END writefile(lines, 'Xscript') ! var didCatch = false try source Xscript catch *************** *** 328,334 **** " Default arg and varargs def MyDefVarargs(one: string, two = 'foo', ...rest: list): string ! let res = one .. ',' .. two for s in rest res ..= ',' .. s endfor --- 328,334 ---- " Default arg and varargs def MyDefVarargs(one: string, two = 'foo', ...rest: list): string ! var res = one .. ',' .. two for s in rest res ..= ',' .. s endfor *************** *** 345,351 **** CheckDefFailure(['MyDefVarargs("one", "two", 123)'], 'E1013: Argument 3: type mismatch, expected string but got number') ! let lines =<< trim END vim9script def Func(...l: list) echo l --- 345,351 ---- CheckDefFailure(['MyDefVarargs("one", "two", 123)'], 'E1013: Argument 3: type mismatch, expected string but got number') ! var lines =<< trim END vim9script def Func(...l: list) echo l *************** *** 410,416 **** enddef def Test_call_call() ! let l = [3, 2, 1] call('reverse', [l]) l->assert_equal([1, 2, 3]) enddef --- 410,416 ---- enddef def Test_call_call() ! var l = [3, 2, 1] call('reverse', [l]) l->assert_equal([1, 2, 3]) enddef *************** *** 430,459 **** enddef def Test_func_type_varargs() ! let RefDefArg: func(?string) RefDefArg = FuncOneDefArg RefDefArg() s:value->assert_equal('text') RefDefArg('some') s:value->assert_equal('some') ! let RefDef2Arg: func(?number, ?string): string RefDef2Arg = FuncTwoDefArg RefDef2Arg()->assert_equal('123text') RefDef2Arg(99)->assert_equal('99text') RefDef2Arg(77, 'some')->assert_equal('77some') ! CheckDefFailure(['let RefWrong: func(string?)'], 'E1010:') ! CheckDefFailure(['let RefWrong: func(?string, string)'], 'E1007:') ! let RefVarargs: func(...list): string RefVarargs = FuncVarargs RefVarargs()->assert_equal('') RefVarargs('one')->assert_equal('one') RefVarargs('one', 'two')->assert_equal('one,two') ! CheckDefFailure(['let RefWrong: func(...list, string)'], 'E110:') ! CheckDefFailure(['let RefWrong: func(...list, ?string)'], 'E110:') enddef " Only varargs --- 430,459 ---- enddef def Test_func_type_varargs() ! var RefDefArg: func(?string) RefDefArg = FuncOneDefArg RefDefArg() s:value->assert_equal('text') RefDefArg('some') s:value->assert_equal('some') ! var RefDef2Arg: func(?number, ?string): string RefDef2Arg = FuncTwoDefArg RefDef2Arg()->assert_equal('123text') RefDef2Arg(99)->assert_equal('99text') RefDef2Arg(77, 'some')->assert_equal('77some') ! CheckDefFailure(['var RefWrong: func(string?)'], 'E1010:') ! CheckDefFailure(['var RefWrong: func(?string, string)'], 'E1007:') ! var RefVarargs: func(...list): string RefVarargs = FuncVarargs RefVarargs()->assert_equal('') RefVarargs('one')->assert_equal('one') RefVarargs('one', 'two')->assert_equal('one,two') ! CheckDefFailure(['var RefWrong: func(...list, string)'], 'E110:') ! CheckDefFailure(['var RefWrong: func(...list, ?string)'], 'E110:') enddef " Only varargs *************** *** 470,476 **** enddef def Test_using_var_as_arg() ! writefile(['def Func(x: number)', 'let x = 234', 'enddef', 'defcompile'], 'Xdef') assert_fails('so Xdef', 'E1006:', '', 1, 'Func') delete('Xdef') enddef --- 470,476 ---- enddef def Test_using_var_as_arg() ! writefile(['def Func(x: number)', 'var x = 234', 'enddef', 'defcompile'], 'Xdef') assert_fails('so Xdef', 'E1006:', '', 1, 'Func') delete('Xdef') enddef *************** *** 485,494 **** def Test_assign_to_argument() # works for dict and list ! let d: dict = {} DictArg(d) d['key']->assert_equal('value') ! let l: list = [] ListArg(l) l[0]->assert_equal('value') --- 485,494 ---- def Test_assign_to_argument() # works for dict and list ! var d: dict = {} DictArg(d) d['key']->assert_equal('value') ! var l: list = [] ListArg(l) l[0]->assert_equal('value') *************** *** 518,529 **** assert_fails('NotAFunc()', 'E117:', '', 2, 'Test_call_funcref') # comment after call assert_fails('g:NotAFunc()', 'E117:', '', 3, 'Test_call_funcref') ! let lines =<< trim END vim9script def RetNumber(): number return 123 enddef ! let Funcref: func: number = function('RetNumber') Funcref()->assert_equal(123) END CheckScriptSuccess(lines) --- 518,529 ---- assert_fails('NotAFunc()', 'E117:', '', 2, 'Test_call_funcref') # comment after call assert_fails('g:NotAFunc()', 'E117:', '', 3, 'Test_call_funcref') ! var lines =<< trim END vim9script def RetNumber(): number return 123 enddef ! var Funcref: func: number = function('RetNumber') Funcref()->assert_equal(123) END CheckScriptSuccess(lines) *************** *** 536,542 **** def Bar(F: func: number): number return F() enddef ! let Funcref = function('RetNumber') Bar(Funcref)->assert_equal(123) END CheckScriptSuccess(lines) --- 536,542 ---- def Bar(F: func: number): number return F() enddef ! var Funcref = function('RetNumber') Bar(Funcref)->assert_equal(123) END CheckScriptSuccess(lines) *************** *** 546,552 **** def UseNumber(nr: number) echo nr enddef ! let Funcref: func(number) = function('UseNumber') Funcref(123) END CheckScriptSuccess(lines) --- 546,552 ---- def UseNumber(nr: number) echo nr enddef ! var Funcref: func(number) = function('UseNumber') Funcref(123) END CheckScriptSuccess(lines) *************** *** 556,562 **** def UseNumber(nr: number) echo nr enddef ! let Funcref: func(string) = function('UseNumber') END CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(string) but got func(number)') --- 556,562 ---- def UseNumber(nr: number) echo nr enddef ! var Funcref: func(string) = function('UseNumber') END CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(string) but got func(number)') *************** *** 565,571 **** def EchoNr(nr = 34) g:echo = nr enddef ! let Funcref: func(?number) = function('EchoNr') Funcref() g:echo->assert_equal(34) Funcref(123) --- 565,571 ---- def EchoNr(nr = 34) g:echo = nr enddef ! var Funcref: func(?number) = function('EchoNr') Funcref() g:echo->assert_equal(34) Funcref(123) *************** *** 578,584 **** def EchoList(...l: list) g:echo = l enddef ! let Funcref: func(...list) = function('EchoList') Funcref() g:echo->assert_equal([]) Funcref(1, 2, 3) --- 578,584 ---- def EchoList(...l: list) g:echo = l enddef ! var Funcref: func(...list) = function('EchoList') Funcref() g:echo->assert_equal([]) Funcref(1, 2, 3) *************** *** 593,599 **** g:listarg = l return nr enddef ! let Funcref: func(number, ?number, ...list): number = function('OptAndVar') Funcref(10)->assert_equal(10) g:optarg->assert_equal(12) g:listarg->assert_equal([]) --- 593,599 ---- g:listarg = l return nr enddef ! var Funcref: func(number, ?number, ...list): number = function('OptAndVar') Funcref(10)->assert_equal(10) g:optarg->assert_equal(12) g:listarg->assert_equal([]) *************** *** 614,634 **** def CombineFuncrefTypes() # same arguments, different return type ! let Ref1: func(bool): string ! let Ref2: func(bool): number ! let Ref3: func(bool): any Ref3 = g:cond ? Ref1 : Ref2 # different number of arguments ! let Refa1: func(bool): number ! let Refa2: func(bool, number): number ! let Refa3: func: number Refa3 = g:cond ? Refa1 : Refa2 # different argument types ! let Refb1: func(bool, string): number ! let Refb2: func(string, number): number ! let Refb3: func(any, any): number Refb3 = g:cond ? Refb1 : Refb2 enddef --- 614,634 ---- def CombineFuncrefTypes() # same arguments, different return type ! var Ref1: func(bool): string ! var Ref2: func(bool): number ! var Ref3: func(bool): any Ref3 = g:cond ? Ref1 : Ref2 # different number of arguments ! var Refa1: func(bool): number ! var Refa2: func(bool, number): number ! var Refa3: func: number Refa3 = g:cond ? Refa1 : Refa2 # different argument types ! var Refb1: func(bool, string): number ! var Refb2: func(string, number): number ! var Refb3: func(any, any): number Refb3 = g:cond ? Refb1 : Refb2 enddef *************** *** 698,728 **** enddef def Test_vim9script_call() ! let lines =<< trim END vim9script ! let var = '' def MyFunc(arg: string) ! var = arg enddef MyFunc('foobar') ! var->assert_equal('foobar') ! let str = 'barfoo' str->MyFunc() ! var->assert_equal('barfoo') g:value = 'value' g:value->MyFunc() ! var->assert_equal('value') ! let listvar = [] def ListFunc(arg: list) listvar = arg enddef [1, 2, 3]->ListFunc() listvar->assert_equal([1, 2, 3]) ! let dictvar = {} def DictFunc(arg: dict) dictvar = arg enddef --- 698,728 ---- enddef def Test_vim9script_call() ! var lines =<< trim END vim9script ! var name = '' def MyFunc(arg: string) ! name = arg enddef MyFunc('foobar') ! name->assert_equal('foobar') ! var str = 'barfoo' str->MyFunc() ! name->assert_equal('barfoo') g:value = 'value' g:value->MyFunc() ! name->assert_equal('value') ! var listvar = [] def ListFunc(arg: list) listvar = arg enddef [1, 2, 3]->ListFunc() listvar->assert_equal([1, 2, 3]) ! var dictvar = {} def DictFunc(arg: dict) dictvar = arg enddef *************** *** 738,765 **** dictvar->assert_equal(#{a: 3, b: 4}) ('text')->MyFunc() ! var->assert_equal('text') ("some")->MyFunc() ! var->assert_equal('some') # line starting with single quote is not a mark # line starting with double quote can be a method call 'asdfasdf'->MyFunc() ! var->assert_equal('asdfasdf') "xyz"->MyFunc() ! var->assert_equal('xyz') def UseString() 'xyork'->MyFunc() enddef UseString() ! var->assert_equal('xyork') def UseString2() "knife"->MyFunc() enddef UseString2() ! var->assert_equal('knife') # prepending a colon makes it a mark new --- 738,765 ---- dictvar->assert_equal(#{a: 3, b: 4}) ('text')->MyFunc() ! name->assert_equal('text') ("some")->MyFunc() ! name->assert_equal('some') # line starting with single quote is not a mark # line starting with double quote can be a method call 'asdfasdf'->MyFunc() ! name->assert_equal('asdfasdf') "xyz"->MyFunc() ! name->assert_equal('xyz') def UseString() 'xyork'->MyFunc() enddef UseString() ! name->assert_equal('xyork') def UseString2() "knife"->MyFunc() enddef UseString2() ! name->assert_equal('knife') # prepending a colon makes it a mark new *************** *** 773,779 **** 'continued' ) assert_equal('continued', ! var ) call MyFunc( --- 773,779 ---- 'continued' ) assert_equal('continued', ! name ) call MyFunc( *************** *** 783,789 **** ) assert_equal( 'morelines', ! var) END writefile(lines, 'Xcall.vim') source Xcall.vim --- 783,789 ---- ) assert_equal( 'morelines', ! name) END writefile(lines, 'Xcall.vim') source Xcall.vim *************** *** 791,801 **** enddef def Test_vim9script_call_fail_decl() ! let lines =<< trim END vim9script ! let var = '' def MyFunc(arg: string) ! let var = 123 enddef defcompile END --- 791,801 ---- enddef def Test_vim9script_call_fail_decl() ! var lines =<< trim END vim9script ! var name = '' def MyFunc(arg: string) ! var name = 123 enddef defcompile END *************** *** 803,809 **** enddef def Test_vim9script_call_fail_type() ! let lines =<< trim END vim9script def MyFunc(arg: string) echo arg --- 803,809 ---- enddef def Test_vim9script_call_fail_type() ! var lines =<< trim END vim9script def MyFunc(arg: string) echo arg *************** *** 814,820 **** enddef def Test_vim9script_call_fail_const() ! let lines =<< trim END vim9script const var = '' def MyFunc(arg: string) --- 814,820 ---- enddef def Test_vim9script_call_fail_const() ! var lines =<< trim END vim9script const var = '' def MyFunc(arg: string) *************** *** 831,837 **** " recognized. func Test_function_python() CheckFeature python3 ! let py = 'python3' execute py "<< EOF" def do_something(): return 1 --- 831,837 ---- " recognized. func Test_function_python() CheckFeature python3 ! var py = 'python3' execute py "<< EOF" def do_something(): return 1 *************** *** 839,845 **** endfunc def Test_delfunc() ! let lines =<< trim END vim9script def g:GoneSoon() echo 'hello' --- 839,845 ---- endfunc def Test_delfunc() ! var lines =<< trim END vim9script def g:GoneSoon() echo 'hello' *************** *** 881,887 **** enddef def Test_vim9script_func() ! let lines =<< trim END vim9script func Func(arg) echo a:arg --- 881,887 ---- enddef def Test_vim9script_func() ! var lines =<< trim END vim9script func Func(arg) echo a:arg *************** *** 992,1004 **** enddef def Test_func_type() ! let Ref1: func() s:funcResult = 0 Ref1 = FuncNoArgNoRet Ref1() s:funcResult->assert_equal(11) ! let Ref2: func s:funcResult = 0 Ref2 = FuncNoArgNoRet Ref2() --- 992,1004 ---- enddef def Test_func_type() ! var Ref1: func() s:funcResult = 0 Ref1 = FuncNoArgNoRet Ref1() s:funcResult->assert_equal(11) ! var Ref2: func s:funcResult = 0 Ref2 = FuncNoArgNoRet Ref2() *************** *** 1021,1027 **** enddef def Test_repeat_return_type() ! let res = 0 for n in repeat([1], 3) res += n endfor --- 1021,1027 ---- enddef def Test_repeat_return_type() ! var res = 0 for n in repeat([1], 3) res += n endfor *************** *** 1036,1042 **** def Test_argv_return_type() next fileone filetwo ! let res = '' for name in argv() res ..= name endfor --- 1036,1042 ---- def Test_argv_return_type() next fileone filetwo ! var res = '' for name in argv() res ..= name endfor *************** *** 1044,1103 **** enddef def Test_func_type_part() ! let RefVoid: func: void RefVoid = FuncNoArgNoRet RefVoid = FuncOneArgNoRet ! CheckDefFailure(['let RefVoid: func: void', 'RefVoid = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...) but got func(): number') ! CheckDefFailure(['let RefVoid: func: void', 'RefVoid = FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...) but got func(): string') ! let RefAny: func(): any RefAny = FuncNoArgRetNumber RefAny = FuncNoArgRetString ! CheckDefFailure(['let RefAny: func(): any', 'RefAny = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func()') ! CheckDefFailure(['let RefAny: func(): any', 'RefAny = FuncOneArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func(number)') ! let RefNr: func: number RefNr = FuncNoArgRetNumber RefNr = FuncOneArgRetNumber ! CheckDefFailure(['let RefNr: func: number', 'RefNr = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): number but got func()') ! CheckDefFailure(['let RefNr: func: number', 'RefNr = FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...): number but got func(): string') ! let RefStr: func: string RefStr = FuncNoArgRetString RefStr = FuncOneArgRetString ! CheckDefFailure(['let RefStr: func: string', 'RefStr = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): string but got func()') ! CheckDefFailure(['let RefStr: func: string', 'RefStr = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...): string but got func(): number') enddef def Test_func_type_fails() ! CheckDefFailure(['let ref1: func()'], 'E704:') ! CheckDefFailure(['let Ref1: func()', 'Ref1 = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(): number') ! CheckDefFailure(['let Ref1: func()', 'Ref1 = FuncOneArgNoRet'], 'E1012: Type mismatch; expected func() but got func(number)') ! CheckDefFailure(['let Ref1: func()', 'Ref1 = FuncOneArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(number): number') ! CheckDefFailure(['let Ref1: func(bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(bool) but got func(bool, number)') ! CheckDefFailure(['let Ref1: func(?bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(?bool) but got func(bool, number)') ! CheckDefFailure(['let Ref1: func(...bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(...bool) but got func(bool, number)') ! ! CheckDefFailure(['let RefWrong: func(string ,number)'], 'E1068:') ! CheckDefFailure(['let RefWrong: func(string,number)'], 'E1069:') ! CheckDefFailure(['let RefWrong: func(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)'], 'E1005:') ! CheckDefFailure(['let RefWrong: func(bool):string'], 'E1069:') enddef def Test_func_return_type() ! let nr: number nr = FuncNoArgRetNumber() nr->assert_equal(1234) nr = FuncOneArgRetAny(122) nr->assert_equal(122) ! let str: string str = FuncOneArgRetAny('yes') str->assert_equal('yes') ! CheckDefFailure(['let str: string', 'str = FuncNoArgRetNumber()'], 'E1012: Type mismatch; expected string but got number') enddef def MultiLine( --- 1044,1103 ---- enddef def Test_func_type_part() ! var RefVoid: func: void RefVoid = FuncNoArgNoRet RefVoid = FuncOneArgNoRet ! CheckDefFailure(['var RefVoid: func: void', 'RefVoid = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...) but got func(): number') ! CheckDefFailure(['var RefVoid: func: void', 'RefVoid = FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...) but got func(): string') ! var RefAny: func(): any RefAny = FuncNoArgRetNumber RefAny = FuncNoArgRetString ! CheckDefFailure(['var RefAny: func(): any', 'RefAny = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func()') ! CheckDefFailure(['var RefAny: func(): any', 'RefAny = FuncOneArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func(number)') ! var RefNr: func: number RefNr = FuncNoArgRetNumber RefNr = FuncOneArgRetNumber ! CheckDefFailure(['var RefNr: func: number', 'RefNr = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): number but got func()') ! CheckDefFailure(['var RefNr: func: number', 'RefNr = FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...): number but got func(): string') ! var RefStr: func: string RefStr = FuncNoArgRetString RefStr = FuncOneArgRetString ! CheckDefFailure(['var RefStr: func: string', 'RefStr = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): string but got func()') ! CheckDefFailure(['var RefStr: func: string', 'RefStr = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...): string but got func(): number') enddef def Test_func_type_fails() ! CheckDefFailure(['var ref1: func()'], 'E704:') ! CheckDefFailure(['var Ref1: func()', 'Ref1 = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(): number') ! CheckDefFailure(['var Ref1: func()', 'Ref1 = FuncOneArgNoRet'], 'E1012: Type mismatch; expected func() but got func(number)') ! CheckDefFailure(['var Ref1: func()', 'Ref1 = FuncOneArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(number): number') ! CheckDefFailure(['var Ref1: func(bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(bool) but got func(bool, number)') ! CheckDefFailure(['var Ref1: func(?bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(?bool) but got func(bool, number)') ! CheckDefFailure(['var Ref1: func(...bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(...bool) but got func(bool, number)') ! ! CheckDefFailure(['var RefWrong: func(string ,number)'], 'E1068:') ! CheckDefFailure(['var RefWrong: func(string,number)'], 'E1069:') ! CheckDefFailure(['var RefWrong: func(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)'], 'E1005:') ! CheckDefFailure(['var RefWrong: func(bool):string'], 'E1069:') enddef def Test_func_return_type() ! var nr: number nr = FuncNoArgRetNumber() nr->assert_equal(1234) nr = FuncOneArgRetAny(122) nr->assert_equal(122) ! var str: string str = FuncOneArgRetAny('yes') str->assert_equal('yes') ! CheckDefFailure(['var str: string', 'str = FuncNoArgRetNumber()'], 'E1012: Type mismatch; expected string but got number') enddef def MultiLine( *************** *** 1161,1167 **** def Test_error_reporting() # comment lines at the start of the function ! let lines =<< trim END " comment def Func() # comment --- 1161,1167 ---- def Test_error_reporting() # comment lines at the start of the function ! var lines =<< trim END " comment def Func() # comment *************** *** 1183,1189 **** lines =<< trim END " comment def Func() ! let x = 1234 # comment # comment invalid --- 1183,1189 ---- lines =<< trim END " comment def Func() ! var x = 1234 # comment # comment invalid *************** *** 1202,1210 **** lines =<< trim END vim9script def Func() ! let db = #{foo: 1, bar: 2} # comment ! let x = db.asdf enddef defcompile Func() --- 1202,1210 ---- lines =<< trim END vim9script def Func() ! var db = #{foo: 1, bar: 2} # comment ! var x = db.asdf enddef defcompile Func() *************** *** 1222,1235 **** def Test_deleted_function() CheckDefExecFailure([ ! 'let RefMe: func = function("g:DelMe")', 'delfunc g:DelMe', 'echo RefMe()'], 'E117:') enddef def Test_unknown_function() CheckDefExecFailure([ ! 'let Ref: func = function("NotExist")', 'delfunc g:NotExist'], 'E700:') enddef --- 1222,1235 ---- def Test_deleted_function() CheckDefExecFailure([ ! 'var RefMe: func = function("g:DelMe")', 'delfunc g:DelMe', 'echo RefMe()'], 'E117:') enddef def Test_unknown_function() CheckDefExecFailure([ ! 'var Ref: func = function("NotExist")', 'delfunc g:NotExist'], 'E700:') enddef *************** *** 1238,1249 **** enddef def Test_closure_simple() ! let local = 'some ' RefFunc({s -> local .. s})->assert_equal('some more') enddef def MakeRef() ! let local = 'some ' g:Ref = {s -> local .. s} enddef --- 1238,1249 ---- enddef def Test_closure_simple() ! var local = 'some ' RefFunc({s -> local .. s})->assert_equal('some more') enddef def MakeRef() ! var local = 'some ' g:Ref = {s -> local .. s} enddef *************** *** 1254,1260 **** enddef def MakeTwoRefs() ! let local = ['some'] g:Extend = {s -> local->add(s)} g:Read = {-> local} enddef --- 1254,1260 ---- enddef def MakeTwoRefs() ! var local = ['some'] g:Extend = {s -> local->add(s)} g:Read = {-> local} enddef *************** *** 1292,1303 **** enddef def MakeArgRefs(theArg: string) ! let local = 'loc_val' g:UseArg = {s -> theArg .. '/' .. local .. '/' .. s} enddef def MakeArgRefsVarargs(theArg: string, ...rest: list) ! let local = 'the_loc' g:UseVararg = {s -> theArg .. '/' .. local .. '/' .. s .. '/' .. join(rest)} enddef --- 1292,1303 ---- enddef def MakeArgRefs(theArg: string) ! var local = 'loc_val' g:UseArg = {s -> theArg .. '/' .. local .. '/' .. s} enddef def MakeArgRefsVarargs(theArg: string, ...rest: list) ! var local = 'the_loc' g:UseVararg = {s -> theArg .. '/' .. local .. '/' .. s .. '/' .. join(rest)} enddef *************** *** 1313,1319 **** enddef def MakeGetAndAppendRefs() ! let local = 'a' def Append(arg: string) local ..= arg --- 1313,1319 ---- enddef def MakeGetAndAppendRefs() ! var local = 'a' def Append(arg: string) local ..= arg *************** *** 1339,1345 **** enddef def Test_nested_closure() ! let local = 'text' def Closure(arg: string): string return local .. arg enddef --- 1339,1345 ---- enddef def Test_nested_closure() ! var local = 'text' def Closure(arg: string): string return local .. arg enddef *************** *** 1351,1369 **** endfunc def Test_call_closure_not_compiled() ! let text = 'text' g:Ref = {s -> s .. text} GetResult(g:Ref)->assert_equal('sometext') enddef def Test_double_closure_fails() ! let lines =<< trim END vim9script def Func() ! let var = 0 ! for i in range(2) ! timer_start(0, {-> var}) ! endfor enddef Func() END --- 1351,1369 ---- endfunc def Test_call_closure_not_compiled() ! var text = 'text' g:Ref = {s -> s .. text} GetResult(g:Ref)->assert_equal('sometext') enddef def Test_double_closure_fails() ! var lines =<< trim END vim9script def Func() ! var name = 0 ! for i in range(2) ! timer_start(0, {-> name}) ! endfor enddef Func() END *************** *** 1371,1377 **** enddef def Test_nested_closure_fails() ! let lines =<< trim END vim9script def FuncA() FuncB(0) --- 1371,1377 ---- enddef def Test_nested_closure_fails() ! var lines =<< trim END vim9script def FuncA() FuncB(0) *************** *** 1385,1424 **** enddef def Test_sort_return_type() ! let res: list res = [1, 2, 3]->sort() enddef def Test_sort_argument() ! let res = ['b', 'a', 'c']->sort('i') res->assert_equal(['a', 'b', 'c']) enddef def Test_getqflist_return_type() ! let l = getqflist() l->assert_equal([]) ! let d = getqflist(#{items: 0}) d->assert_equal(#{items: []}) enddef def Test_getloclist_return_type() ! let l = getloclist(1) l->assert_equal([]) ! let d = getloclist(1, #{items: 0}) d->assert_equal(#{items: []}) enddef def Test_copy_return_type() ! let l = copy([1, 2, 3]) ! let res = 0 for n in l res += n endfor res->assert_equal(6) ! let dl = deepcopy([1, 2, 3]) res = 0 for n in dl res += n --- 1385,1424 ---- enddef def Test_sort_return_type() ! var res: list res = [1, 2, 3]->sort() enddef def Test_sort_argument() ! var res = ['b', 'a', 'c']->sort('i') res->assert_equal(['a', 'b', 'c']) enddef def Test_getqflist_return_type() ! var l = getqflist() l->assert_equal([]) ! var d = getqflist(#{items: 0}) d->assert_equal(#{items: []}) enddef def Test_getloclist_return_type() ! var l = getloclist(1) l->assert_equal([]) ! var d = getloclist(1, #{items: 0}) d->assert_equal(#{items: []}) enddef def Test_copy_return_type() ! var l = copy([1, 2, 3]) ! var res = 0 for n in l res += n endfor res->assert_equal(6) ! var dl = deepcopy([1, 2, 3]) res = 0 for n in dl res += n *************** *** 1429,1436 **** enddef def Test_extend_return_type() ! let l = extend([1, 2], [3]) ! let res = 0 for n in l res += n endfor --- 1429,1436 ---- enddef def Test_extend_return_type() ! var l = extend([1, 2], [3]) ! var res = 0 for n in l res += n endfor *************** *** 1442,1449 **** enddef def Test_insert_return_type() ! let l = insert([2, 1], 3) ! let res = 0 for n in l res += n endfor --- 1442,1449 ---- enddef def Test_insert_return_type() ! var l = insert([2, 1], 3) ! var res = 0 for n in l res += n endfor *************** *** 1456,1463 **** enddef def Test_reverse_return_type() ! let l = reverse([1, 2, 3]) ! let res = 0 for n in l res += n endfor --- 1456,1463 ---- enddef def Test_reverse_return_type() ! var l = reverse([1, 2, 3]) ! var res = 0 for n in l res += n endfor *************** *** 1465,1472 **** enddef def Test_remove_return_type() ! let l = remove(#{one: [1, 2], two: [3, 4]}, 'one') ! let res = 0 for n in l res += n endfor --- 1465,1472 ---- enddef def Test_remove_return_type() ! var l = remove(#{one: [1, 2], two: [3, 4]}, 'one') ! var res = 0 for n in l res += n endfor *************** *** 1474,1481 **** enddef def Test_filter_return_type() ! let l = filter([1, 2, 3], {-> 1}) ! let res = 0 for n in l res += n endfor --- 1474,1481 ---- enddef def Test_filter_return_type() ! var l = filter([1, 2, 3], {-> 1}) ! var res = 0 for n in l res += n endfor *************** *** 1483,1489 **** enddef def Test_bufnr() ! let buf = bufnr() bufnr('%')->assert_equal(buf) buf = bufnr('Xdummy', true) --- 1483,1489 ---- enddef def Test_bufnr() ! var buf = bufnr() bufnr('%')->assert_equal(buf) buf = bufnr('Xdummy', true) *************** *** 1502,1510 **** enddef def Test_getreg_return_type() ! let s1: string = getreg('"') ! let s2: string = getreg('"', 1) ! let s3: list = getreg('"', 1, 1) enddef def Wrong_dict_key_type(items: list): list --- 1502,1510 ---- enddef def Test_getreg_return_type() ! var s1: string = getreg('"') ! var s2: string = getreg('"', 1) ! var s3: list = getreg('"', 1, 1) enddef def Wrong_dict_key_type(items: list): list *************** *** 1516,1525 **** enddef def Line_continuation_in_def(dir: string = ''): string ! let path: string = empty(dir) ! \ ? 'empty' ! \ : 'full' ! return path enddef def Test_line_continuation_in_def() --- 1516,1525 ---- enddef def Line_continuation_in_def(dir: string = ''): string ! var path: string = empty(dir) ! \ ? 'empty' ! \ : 'full' ! return path enddef def Test_line_continuation_in_def() *************** *** 1527,1533 **** enddef def Line_continuation_in_lambda(): list ! let x = range(97, 100) ->map({_, v -> nr2char(v) ->toupper()}) ->reverse() --- 1527,1533 ---- enddef def Line_continuation_in_lambda(): list ! var x = range(97, 100) ->map({_, v -> nr2char(v) ->toupper()}) ->reverse() *************** *** 1571,1579 **** enddef def Test_bufwinid() ! let origwin = win_getid() below split SomeFile ! let SomeFileID = win_getid() below split OtherFile below split SomeFile bufwinid('SomeFile')->assert_equal(SomeFileID) --- 1571,1579 ---- enddef def Test_bufwinid() ! var origwin = win_getid() below split SomeFile ! var SomeFileID = win_getid() below split OtherFile below split SomeFile bufwinid('SomeFile')->assert_equal(SomeFileID) *************** *** 1596,1602 **** enddef def Test_getbufinfo() ! let bufinfo = getbufinfo(bufnr()) getbufinfo('%')->assert_equal(bufinfo) edit Xtestfile1 --- 1596,1602 ---- enddef def Test_getbufinfo() ! var bufinfo = getbufinfo(bufnr()) getbufinfo('%')->assert_equal(bufinfo) edit Xtestfile1 *************** *** 1609,1617 **** def Test_getbufline() e SomeFile ! let buf = bufnr() e # ! let lines = ['aaa', 'bbb', 'ccc'] setbufline(buf, 1, lines) getbufline('#', 1, '$')->assert_equal(lines) --- 1609,1617 ---- def Test_getbufline() e SomeFile ! var buf = bufnr() e # ! var lines = ['aaa', 'bbb', 'ccc'] setbufline(buf, 1, lines) getbufline('#', 1, '$')->assert_equal(lines) *************** *** 1621,1627 **** def Test_getchangelist() new setline(1, 'some text') ! let changelist = bufnr()->getchangelist() getchangelist('%')->assert_equal(changelist) bwipe! enddef --- 1621,1627 ---- def Test_getchangelist() new setline(1, 'some text') ! var changelist = bufnr()->getchangelist() getchangelist('%')->assert_equal(changelist) bwipe! enddef *************** *** 1634,1646 **** def Test_getcompletion() set wildignore=*.vim,*~ ! let l = getcompletion('run', 'file', true) l->assert_equal([]) set wildignore& enddef def Test_getreg() ! let lines = ['aaa', 'bbb', 'ccc'] setreg('a', lines) getreg('a', true, true)->assert_equal(lines) enddef --- 1634,1646 ---- def Test_getcompletion() set wildignore=*.vim,*~ ! var l = getcompletion('run', 'file', true) l->assert_equal([]) set wildignore& enddef def Test_getreg() ! var lines = ['aaa', 'bbb', 'ccc'] setreg('a', lines) getreg('a', true, true)->assert_equal(lines) enddef *************** *** 1669,1676 **** enddef def Test_list2str_str2list_utf8() ! let s = "\u3042\u3044" ! let l = [0x3042, 0x3044] str2list(s, true)->assert_equal(l) list2str(l, true)->assert_equal(s) enddef --- 1669,1676 ---- enddef def Test_list2str_str2list_utf8() ! var s = "\u3042\u3044" ! var l = [0x3042, 0x3044] str2list(s, true)->assert_equal(l) list2str(l, true)->assert_equal(s) enddef *************** *** 1682,1688 **** enddef def Test_maparg() ! let lnum = str2nr(expand('')) map foo bar maparg('foo', '', false, true)->assert_equal(#{ lnum: lnum + 1, --- 1682,1688 ---- enddef def Test_maparg() ! var lnum = str2nr(expand('')) map foo bar maparg('foo', '', false, true)->assert_equal(#{ lnum: lnum + 1, *************** *** 1718,1724 **** def Test_search() new setline(1, ['foo', 'bar']) ! let val = 0 # skip expr returns boolean search('bar', 'W', 0, 0, {-> val == 1})->assert_equal(2) :1 --- 1718,1724 ---- def Test_search() new setline(1, ['foo', 'bar']) ! var val = 0 # skip expr returns boolean search('bar', 'W', 0, 0, {-> val == 1})->assert_equal(2) :1 *************** *** 1766,1780 **** enddef def Test_setloclist() ! let items = [#{filename: '/tmp/file', lnum: 1, valid: true}] ! let what = #{items: items} setqflist([], ' ', what) setloclist(0, [], ' ', what) enddef def Test_setreg() setreg('a', ['aaa', 'bbb', 'ccc']) ! let reginfo = getreginfo('a') setreg('a', reginfo) getreginfo('a')->assert_equal(reginfo) enddef --- 1766,1780 ---- enddef def Test_setloclist() ! var items = [#{filename: '/tmp/file', lnum: 1, valid: true}] ! var what = #{items: items} setqflist([], ' ', what) setloclist(0, [], ' ', what) enddef def Test_setreg() setreg('a', ['aaa', 'bbb', 'ccc']) ! var reginfo = getreginfo('a') setreg('a', reginfo) getreginfo('a')->assert_equal(reginfo) enddef *************** *** 1800,1809 **** enddef def Test_submatch() ! let pat = 'A\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)' ! let Rep = {-> range(10)->map({_, v -> submatch(v, true)})->string()} ! let actual = substitute('A123456789', pat, Rep, '') ! let expected = "[['A123456789'], ['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8'], ['9']]" actual->assert_equal(expected) enddef --- 1800,1809 ---- enddef def Test_submatch() ! var pat = 'A\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)' ! var Rep = {-> range(10)->map({_, v -> submatch(v, true)})->string()} ! var actual = substitute('A123456789', pat, Rep, '') ! var expected = "[['A123456789'], ['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8'], ['9']]" actual->assert_equal(expected) enddef *************** *** 1818,1824 **** if !has('terminal') MissingFeature 'terminal' else ! let buf = Run_shell_in_terminal({}) term_gettty(buf, true)->assert_notequal('') StopShellInTerminal(buf) endif --- 1818,1824 ---- if !has('terminal') MissingFeature 'terminal' else ! var buf = Run_shell_in_terminal({}) term_gettty(buf, true)->assert_notequal('') StopShellInTerminal(buf) endif *************** *** 1829,1835 **** MissingFeature 'terminal' else botright new ! let winnr = winnr() term_start(&shell, #{curwin: true}) winnr()->assert_equal(winnr) bwipe! --- 1829,1835 ---- MissingFeature 'terminal' else botright new ! var winnr = winnr() term_start(&shell, #{curwin: true}) winnr()->assert_equal(winnr) bwipe! *************** *** 1837,1845 **** enddef def Test_timer_paused() ! let id = timer_start(50, {-> 0}) timer_pause(id, true) ! let info = timer_info(id) info[0]['paused']->assert_equal(1) timer_stop(id) enddef --- 1837,1845 ---- enddef def Test_timer_paused() ! var id = timer_start(50, {-> 0}) timer_pause(id, true) ! var info = timer_info(id) info[0]['paused']->assert_equal(1) timer_stop(id) enddef *************** *** 1884,1890 **** enddef def Test_partial_call() ! let Xsetlist = function('setloclist', [0]) Xsetlist([], ' ', {'title': 'test'}) getloclist(0, {'title': 1})->assert_equal({'title': 'test'}) --- 1884,1890 ---- enddef def Test_partial_call() ! var Xsetlist = function('setloclist', [0]) Xsetlist([], ' ', {'title': 'test'}) getloclist(0, {'title': 1})->assert_equal({'title': 'test'}) *************** *** 1909,1915 **** def Test_restore_modifiers() # check that when compiling a :def function command modifiers are not messed # up. ! let lines =<< trim END vim9script set eventignore= autocmd QuickFixCmdPost * copen --- 1909,1915 ---- def Test_restore_modifiers() # check that when compiling a :def function command modifiers are not messed # up. ! var lines =<< trim END vim9script set eventignore= autocmd QuickFixCmdPost * copen *** ../vim-8.2.1765/src/testdir/test_vim9_script.vim 2020-09-27 15:19:23.642118924 +0200 --- src/testdir/test_vim9_script.vim 2020-09-27 22:42:37.036866582 +0200 *************** *** 6,14 **** source vim9.vim source shared.vim - " TODO: remove later - let v:disallow_let = 1 - def Test_range_only() new setline(1, ['blah', 'Blah']) --- 6,11 ---- *** ../vim-8.2.1765/src/testdir/test_maparg.vim 2020-09-06 15:58:33.383154915 +0200 --- src/testdir/test_maparg.vim 2020-09-27 22:12:04.418817877 +0200 *************** *** 83,95 **** def Test_vim9_maparg() nmap { w ! let one: string = maparg('{') assert_equal('w', one) ! let two: string = maparg('{', 'n') assert_equal('w', two) ! let three: string = maparg('{', 'n', 0) assert_equal('w', three) ! let four: dict = maparg('{', 'n', 0, 1) assert_equal(['{', 'w', 'n'], [four.lhs, four.rhs, four.mode]) nunmap { enddef --- 83,95 ---- def Test_vim9_maparg() nmap { w ! var one: string = maparg('{') assert_equal('w', one) ! var two: string = maparg('{', 'n') assert_equal('w', two) ! var three: string = maparg('{', 'n', 0) assert_equal('w', three) ! var four: dict = maparg('{', 'n', 0, 1) assert_equal(['{', 'w', 'n'], [four.lhs, four.rhs, four.mode]) nunmap { enddef *** ../vim-8.2.1765/src/testdir/test_popupwin.vim 2020-09-27 21:16:41.760046900 +0200 --- src/testdir/test_popupwin.vim 2020-09-27 22:15:44.041961383 +0200 *************** *** 2690,2696 **** split wincmd b assert_equal(2, winnr()) ! let buf = term_start(&shell, #{hidden: 1}) popup_create(buf, {}) TermWait(buf, 100) popup_clear(true) --- 2690,2696 ---- split wincmd b assert_equal(2, winnr()) ! var buf = term_start(&shell, #{hidden: 1}) popup_create(buf, {}) TermWait(buf, 100) popup_clear(true) *** ../vim-8.2.1765/src/testdir/test_textprop.vim 2020-09-20 21:04:31.811898396 +0200 --- src/testdir/test_textprop.vim 2020-09-27 22:39:56.245338132 +0200 *************** *** 226,233 **** endfor endfor cursor(1, 8) ! let expected = {'lnum': 1, 'id': 0, 'col': 14, 'end': 1, 'type': 'misspell', 'length': 2, 'start': 1} ! let result = prop_find(#{type: 'misspell', skipstart: true}, 'f') assert_equal(expected, result) prop_type_delete('misspell') --- 226,233 ---- endfor endfor cursor(1, 8) ! var expected = {'lnum': 1, 'id': 0, 'col': 14, 'end': 1, 'type': 'misspell', 'length': 2, 'start': 1} ! var result = prop_find(#{type: 'misspell', skipstart: true}, 'f') assert_equal(expected, result) prop_type_delete('misspell') *** ../vim-8.2.1765/src/version.c 2020-09-27 21:58:42.153049879 +0200 --- src/version.c 2020-09-27 22:02:57.700330434 +0200 *************** *** 752,753 **** --- 752,755 ---- { /* Add new patch number below this line */ + /**/ + 1766, /**/ -- The goal of science is to build better mousetraps. The goal of nature is to build better mice. /// 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 ///