To: vim_dev@googlegroups.com Subject: Patch 8.2.1623 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.1623 Problem: Vim9: using :call where it is not needed. Solution: Remove :call. (closes #6892) Files: src/testdir/test_maparg.vim, src/testdir/test_textprop.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 *** ../vim-8.2.1622/src/testdir/test_maparg.vim 2020-08-08 17:55:46.246417672 +0200 --- src/testdir/test_maparg.vim 2020-09-06 15:54:57.015669161 +0200 *************** *** 90,96 **** let three: string = maparg('{', 'n', 0) assert_equal('w', three) let four: dict = maparg('{', 'n', 0, 1) ! call assert_equal(['{', 'w', 'n'], [four.lhs, four.rhs, four.mode]) nunmap { enddef --- 90,96 ---- 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 *** ../vim-8.2.1622/src/testdir/test_textprop.vim 2020-09-05 20:59:55.108468975 +0200 --- src/testdir/test_textprop.vim 2020-09-06 15:54:57.015669161 +0200 *************** *** 334,343 **** def Test_prop_remove_vim9() new ! call AddPropTypes() ! call SetupPropsInFirstLine() ! call assert_equal(1, prop_remove({'type': 'three', 'id': 13, 'both': true, 'all': true})) ! call DeletePropTypes() bwipe! enddef --- 334,343 ---- def Test_prop_remove_vim9() new ! AddPropTypes() ! SetupPropsInFirstLine() ! assert_equal(1, prop_remove({'type': 'three', 'id': 13, 'both': true, 'all': true})) ! DeletePropTypes() bwipe! enddef *** ../vim-8.2.1622/src/testdir/test_vim9_disassemble.vim 2020-08-16 17:33:29.517887810 +0200 --- src/testdir/test_vim9_disassemble.vim 2020-09-06 15:54:57.015669161 +0200 *************** *** 558,564 **** enddef def Test_disassemble_const_expr() ! assert_equal("\nyes", execute('call HasEval()')) let instr = execute('disassemble HasEval') assert_match('HasEval\_s*' .. 'if has("eval")\_s*' .. --- 558,564 ---- enddef def Test_disassemble_const_expr() ! assert_equal("\nyes", execute('HasEval()')) let instr = execute('disassemble HasEval') assert_match('HasEval\_s*' .. 'if has("eval")\_s*' .. *************** *** 571,577 **** instr) assert_notmatch('JUMP', instr) ! assert_equal("\nno", execute('call HasNothing()')) instr = execute('disassemble HasNothing') assert_match('HasNothing\_s*' .. 'if has("nothing")\_s*' .. --- 571,577 ---- instr) assert_notmatch('JUMP', instr) ! assert_equal("\nno", execute('HasNothing()')) instr = execute('disassemble HasNothing') assert_match('HasNothing\_s*' .. 'if has("nothing")\_s*' .. *************** *** 585,591 **** assert_notmatch('PUSHS "yes"', instr) assert_notmatch('JUMP', instr) ! assert_equal("\neval", execute('call HasSomething()')) instr = execute('disassemble HasSomething') assert_match('HasSomething.*' .. 'if has("nothing")\_s*' .. --- 585,591 ---- assert_notmatch('PUSHS "yes"', instr) assert_notmatch('JUMP', instr) ! assert_equal("\neval", execute('HasSomething()')) instr = execute('disassemble HasSomething') assert_match('HasSomething.*' .. 'if has("nothing")\_s*' .. *************** *** 1088,1094 **** '\d\+ MEMBER\_s*' .. '\d\+ STORE $1\_s*', instr) ! call assert_equal(1, DictMember()) enddef let somelist = [1, 2, 3, 4, 5] --- 1088,1094 ---- '\d\+ MEMBER\_s*' .. '\d\+ STORE $1\_s*', instr) ! assert_equal(1, DictMember()) enddef let somelist = [1, 2, 3, 4, 5] *************** *** 1156,1162 **** '\d NEGATENR\_s*' .. '\d STORE $2\_s*', instr) ! call assert_equal(-9, NegateNumber()) enddef def InvertBool(): bool --- 1156,1162 ---- '\d NEGATENR\_s*' .. '\d STORE $2\_s*', instr) ! assert_equal(-9, NegateNumber()) enddef def InvertBool(): bool *************** *** 1181,1187 **** '\d 2BOOL (!!val)\_s*' .. '\d STORE $2\_s*', instr) ! call assert_equal(true, InvertBool()) enddef def Test_disassemble_compare() --- 1181,1187 ---- '\d 2BOOL (!!val)\_s*' .. '\d STORE $2\_s*', instr) ! assert_equal(true, InvertBool()) enddef def Test_disassemble_compare() *** ../vim-8.2.1622/src/testdir/test_vim9_expr.vim 2020-09-05 20:06:29.751863835 +0200 --- src/testdir/test_vim9_expr.vim 2020-09-06 15:56:00.283520613 +0200 *************** *** 122,128 **** lines =<< trim END vim9script try ! call eval('0 ? 1: 2') catch endtry assert_equal(v:true, eval(string(v:true))) --- 122,128 ---- lines =<< trim END vim9script try ! eval('0 ? 1: 2') catch endtry assert_equal(v:true, eval(string(v:true))) *************** *** 132,138 **** lines =<< trim END vim9script try ! call eval('0 ? 1 :2') catch endtry assert_equal(v:true, eval(string(v:true))) --- 132,138 ---- lines =<< trim END vim9script try ! eval('0 ? 1 :2') catch endtry assert_equal(v:true, eval(string(v:true))) *************** *** 480,486 **** assert_equal(false, 'abc' ==# 'ABC') set noignorecase ! call CheckDefFailure(["let x = 'a' == xxx"], 'E1001:', 1) let bb = 0z3f assert_equal(true, 0z3f == bb) --- 480,486 ---- assert_equal(false, 'abc' ==# 'ABC') set noignorecase ! CheckDefFailure(["let x = 'a' == xxx"], 'E1001:', 1) let bb = 0z3f assert_equal(true, 0z3f == bb) *************** *** 1225,1231 **** * yf[0]) endif ! call CheckDefFailure(["let x = 6 * xxx"], 'E1001', 1) enddef def Test_expr6_vim9script() --- 1225,1231 ---- * yf[0]) endif ! CheckDefFailure(["let x = 6 * xxx"], 'E1001', 1) enddef def Test_expr6_vim9script() *************** *** 1382,1390 **** let nr = 234 assert_equal(234, nr) ! call CheckDefFailure(["let x = 123"], 'E1010:', 1) ! call CheckDefFailure(["let x = 123"], 'E1068:', 1) ! call CheckDefFailure(["let x = 234 assert_equal(234, nr) ! CheckDefFailure(["let x = 123"], 'E1010:', 1) ! CheckDefFailure(["let x = 123"], 'E1068:', 1) ! CheckDefFailure(["let x = = v:oldfiles let compl: dict = v:completed_item ! call CheckDefFailure(["let old: list = v:oldfiles"], 'E1012: type mismatch, expected list but got list', 1) ! call CheckDefFailure(["let old: dict = v:completed_item"], 'E1012: type mismatch, expected dict but got dict', 1) enddef def Test_expr7_special() --- 1429,1444 ---- assert_equal(g:string_long, "abcdefghijklm") assert_equal(g:string_special, "ab\ncd\ref\ekk") ! CheckDefFailure(['let x = "abc'], 'E114:', 1) ! CheckDefFailure(["let x = 'abc"], 'E115:', 1) enddef def Test_expr7_vimvar() let old: list = v:oldfiles let compl: dict = v:completed_item ! CheckDefFailure(["let old: list = v:oldfiles"], 'E1012: type mismatch, expected list but got list', 1) ! CheckDefFailure(["let old: dict = v:completed_item"], 'E1012: type mismatch, expected dict but got dict', 1) enddef def Test_expr7_special() *************** *** 1460,1470 **** assert_equal(g:special_null, v:null) assert_equal(g:special_none, v:none) ! call CheckDefFailure(['v:true = true'], 'E46:', 1) ! call CheckDefFailure(['v:true = false'], 'E46:', 1) ! call CheckDefFailure(['v:false = true'], 'E46:', 1) ! call CheckDefFailure(['v:null = 11'], 'E46:', 1) ! call CheckDefFailure(['v:none = 22'], 'E46:', 1) enddef def Test_expr7_special_vim9script() --- 1460,1470 ---- assert_equal(g:special_null, v:null) assert_equal(g:special_none, v:none) ! CheckDefFailure(['v:true = true'], 'E46:', 1) ! CheckDefFailure(['v:true = false'], 'E46:', 1) ! CheckDefFailure(['v:false = true'], 'E46:', 1) ! CheckDefFailure(['v:null = 11'], 'E46:', 1) ! CheckDefFailure(['v:none = 22'], 'E46:', 1) enddef def Test_expr7_special_vim9script() *************** *** 1509,1532 **** 2] [3, 4] ! call CheckDefFailure(["let x = 1234[3]"], 'E1107:', 1) ! call CheckDefExecFailure(["let x = g:anint[3]"], 'E1062:', 1) ! call CheckDefFailure(["let x = g:list_mixed[xxx]"], 'E1001:', 1) ! call CheckDefFailure(["let x = [1,2,3]"], 'E1069:', 1) ! call CheckDefFailure(["let x = [1 ,2, 3]"], 'E1068:', 1) ! call CheckDefExecFailure(["echo 1", "let x = [][0]", "echo 3"], 'E684:', 2) ! ! call CheckDefExecFailure(["let x = g:list_mixed['xx']"], 'E1029:', 1) ! call CheckDefFailure(["let x = g:list_mixed["], 'E1097:', 2) ! call CheckDefFailure(["let x = g:list_mixed[0"], 'E1097:', 2) ! call CheckDefExecFailure(["let x = g:list_empty[3]"], 'E684:', 1) ! call CheckDefFailure(["let l: list = [234, 'x']"], 'E1012:', 1) ! call CheckDefFailure(["let l: list = ['x', 234]"], 'E1012:', 1) ! call CheckDefFailure(["let l: list = [234, 'x']"], 'E1012:', 1) ! call CheckDefFailure(["let l: list = ['x', 123]"], 'E1012:', 1) enddef def Test_expr7_list_vim9script() --- 1509,1532 ---- 2] [3, 4] ! 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']"], 'E1029:', 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) ! CheckDefFailure(["let l: list = [234, 'x']"], 'E1012:', 1) ! CheckDefFailure(["let l: list = ['x', 234]"], 'E1012:', 1) ! CheckDefFailure(["let l: list = [234, 'x']"], 'E1012:', 1) ! CheckDefFailure(["let l: list = ['x', 123]"], 'E1012:', 1) enddef def Test_expr7_list_vim9script() *************** *** 1647,1655 **** assert_equal(false, LambdaUsingArg(0)()) assert_equal(true, LambdaUsingArg(1)()) ! call CheckDefFailure(["filter([1, 2], {k,v -> 1})"], 'E1069:', 1) # error is in first line of the lambda ! call CheckDefFailure(["let L = {a -> a + b}"], 'E1001:', 0) assert_equal('xxxyyy', 'xxx'->{a, b -> a .. b}('yyy')) --- 1647,1655 ---- assert_equal(false, LambdaUsingArg(0)()) assert_equal(true, LambdaUsingArg(1)()) ! 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')) *************** *** 1714,1739 **** mixed = #{a: 234} mixed = #{} ! call CheckDefFailure(["let x = #{a:8}"], 'E1069:', 1) ! call CheckDefFailure(["let x = #{a : 8}"], 'E1068:', 1) ! call CheckDefFailure(["let x = #{a :8}"], 'E1068:', 1) ! call CheckDefFailure(["let x = #{a: 8 , b: 9}"], 'E1068:', 1) ! ! call CheckDefFailure(["let x = #{8: 8}"], 'E1014:', 1) ! call CheckDefFailure(["let x = #{xxx}"], 'E720:', 1) ! call CheckDefFailure(["let x = #{xxx: 1", "let y = 2"], 'E722:', 2) ! call CheckDefFailure(["let x = #{xxx: 1,"], 'E723:', 2) ! call CheckDefFailure(["let x = {'a': xxx}"], 'E1001:', 1) ! call CheckDefFailure(["let x = {xxx: 8}"], 'E1001:', 1) ! call CheckDefFailure(["let x = #{a: 1, a: 2}"], 'E721:', 1) ! call CheckDefFailure(["let x = #"], 'E1015:', 1) ! call CheckDefExecFailure(["let x = g:anint.member"], 'E715:', 1) ! call CheckDefExecFailure(["let x = g:dict_empty.member"], 'E716:', 1) ! ! call CheckDefFailure(['let x: dict = #{a: 234, b: "1"}'], 'E1012:', 1) ! call CheckDefFailure(['let x: dict = #{a: "x", b: 134}'], 'E1012:', 1) ! call CheckDefFailure(['let x: dict = #{a: 234, b: "1"}'], 'E1012:', 1) ! call CheckDefFailure(['let x: dict = #{a: "x", b: 134}'], 'E1012:', 1) enddef def Test_expr7_dict_vim9script() --- 1714,1739 ---- mixed = #{a: 234} mixed = #{} ! 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) ! ! CheckDefFailure(['let x: dict = #{a: 234, b: "1"}'], 'E1012:', 1) ! CheckDefFailure(['let x: dict = #{a: "x", b: 134}'], 'E1012:', 1) ! CheckDefFailure(['let x: dict = #{a: 234, b: "1"}'], 'E1012:', 1) ! CheckDefFailure(['let x: dict = #{a: "x", b: 134}'], 'E1012:', 1) enddef def Test_expr7_dict_vim9script() *************** *** 1837,1845 **** assert_equal('one', #{one: 'one'}.one) assert_equal('one', #{one: 'one'}[g:oneString]) ! call CheckDefFailure(["let x = g:dict_one.#$!"], 'E1002:', 1) ! call CheckDefExecFailure(["let d: dict", "echo d['a']"], 'E716:', 2) ! call CheckDefExecFailure(["let d: dict", "d = g:list_empty"], 'E1029: Expected dict but got list', 2) enddef def Test_expr7_any_index_slice() --- 1837,1845 ---- 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"], 'E1029: Expected dict but got list', 2) enddef def Test_expr7_any_index_slice() *************** *** 1991,1997 **** assert_equal('testvar', $TESTVAR) assert_equal('', $ASDF_ASD_XXX) ! call CheckDefFailure(["let x = $$$"], 'E1002:', 1) enddef def Test_expr7_register() --- 1991,1997 ---- assert_equal('testvar', $TESTVAR) assert_equal('', $ASDF_ASD_XXX) ! CheckDefFailure(["let x = $$$"], 'E1002:', 1) enddef def Test_expr7_register() *************** *** 2006,2012 **** normal axyz assert_equal("xyz", @.) ! call CheckDefFailure(["@. = 'yes'"], 'E354:', 1) @/ = 'slash' assert_equal('slash', @/) --- 2006,2012 ---- normal axyz assert_equal("xyz", @.) ! CheckDefFailure(["@. = 'yes'"], 'E354:', 1) @/ = 'slash' assert_equal('slash', @/) *************** *** 2091,2101 **** assert_equal(true, !range(5)->empty()) assert_equal([0, 1, 2], --3->range()) ! call CheckDefFailure(["let x = 'yes'->Echo"], 'E107:', 1) ! call CheckScriptFailure([ ! "vim9script", ! "let x = substitute ('x', 'x', 'x', 'x')" ! ], 'E121:', 2) let auto_lines =<< trim END def g:some#func(): string --- 2091,2101 ---- 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) let auto_lines =<< trim END def g:some#func(): string *** ../vim-8.2.1622/src/testdir/test_vim9_func.vim 2020-09-05 22:45:31.568748909 +0200 --- src/testdir/test_vim9_func.vim 2020-09-06 15:54:57.019669149 +0200 *************** *** 29,35 **** def Test_return_something() assert_equal('string', ReturnString()) assert_equal(123, ReturnNumber()) ! assert_fails('call ReturnGlobal()', 'E1029: Expected number but got string') enddef def Test_missing_return() --- 29,35 ---- def Test_return_something() assert_equal('string', ReturnString()) assert_equal(123, ReturnNumber()) ! assert_fails('ReturnGlobal()', 'E1029: Expected number but got string') enddef def Test_missing_return() *************** *** 111,117 **** def Test_call_default_args() assert_equal('string', MyDefaultArgs()) assert_equal('one', MyDefaultArgs('one')) ! assert_fails('call MyDefaultArgs("one", "two")', 'E118:') assert_equal('test', MyDefaultSecond('test')) assert_equal('test', MyDefaultSecond('test', true)) --- 111,117 ---- def Test_call_default_args() assert_equal('string', MyDefaultArgs()) assert_equal('one', MyDefaultArgs('one')) ! assert_fails('MyDefaultArgs("one", "two")', 'E118:') assert_equal('test', MyDefaultSecond('test')) assert_equal('test', MyDefaultSecond('test', true)) *************** *** 219,228 **** endfunc def Test_call_wrong_args() ! call CheckDefFailure(['TakesOneArg()'], 'E119:') ! call CheckDefFailure(['TakesOneArg(11, 22)'], 'E118:') ! call CheckDefFailure(['bufnr(xxx)'], 'E1001:') ! call CheckScriptFailure(['def Func(Ref: func(s: string))'], 'E475:') let lines =<< trim END vim9script --- 219,228 ---- endfunc def Test_call_wrong_args() ! CheckDefFailure(['TakesOneArg()'], 'E119:') ! CheckDefFailure(['TakesOneArg(11, 22)'], 'E118:') ! CheckDefFailure(['bufnr(xxx)'], 'E1001:') ! CheckScriptFailure(['def Func(Ref: func(s: string))'], 'E475:') let lines =<< trim END vim9script *************** *** 244,250 **** enddef def Test_call_def_varargs() ! call assert_fails('call MyDefVarargs()', 'E119:') assert_equal('one,foo', MyDefVarargs('one')) assert_equal('one,two', MyDefVarargs('one', 'two')) assert_equal('one,two,three', MyDefVarargs('one', 'two', 'three')) --- 244,250 ---- enddef def Test_call_def_varargs() ! assert_fails('MyDefVarargs()', 'E119:') assert_equal('one,foo', MyDefVarargs('one')) assert_equal('one,two', MyDefVarargs('one', 'two')) assert_equal('one,two,three', MyDefVarargs('one', 'two', 'three')) *************** *** 333,340 **** assert_equal('99text', RefDef2Arg(99)) assert_equal('77some', RefDef2Arg(77, 'some')) ! call CheckDefFailure(['let RefWrong: func(string?)'], 'E1010:') ! call CheckDefFailure(['let RefWrong: func(?string, string)'], 'E1007:') let RefVarargs: func(...list): string RefVarargs = FuncVarargs --- 333,340 ---- assert_equal('99text', RefDef2Arg(99)) assert_equal('77some', RefDef2Arg(77, 'some')) ! CheckDefFailure(['let RefWrong: func(string?)'], 'E1010:') ! CheckDefFailure(['let RefWrong: func(?string, string)'], 'E1007:') let RefVarargs: func(...list): string RefVarargs = FuncVarargs *************** *** 342,349 **** assert_equal('one', RefVarargs('one')) assert_equal('one,two', RefVarargs('one', 'two')) ! call CheckDefFailure(['let RefWrong: func(...list, string)'], 'E110:') ! call CheckDefFailure(['let RefWrong: func(...list, ?string)'], 'E110:') enddef " Only varargs --- 342,349 ---- assert_equal('one', RefVarargs('one')) assert_equal('one,two', RefVarargs('one', 'two')) ! CheckDefFailure(['let RefWrong: func(...list, string)'], 'E110:') ! CheckDefFailure(['let RefWrong: func(...list, ?string)'], 'E110:') enddef " Only varargs *************** *** 355,368 **** assert_equal('', MyVarargsOnly()) assert_equal('one', MyVarargsOnly('one')) assert_equal('one,two', MyVarargsOnly('one', 'two')) ! call CheckDefFailure(['MyVarargsOnly(1)'], 'E1013: argument 1: type mismatch, expected string but got number') ! call CheckDefFailure(['MyVarargsOnly("one", 2)'], 'E1013: argument 2: type mismatch, expected string but got number') enddef def Test_using_var_as_arg() ! call writefile(['def Func(x: number)', 'let x = 234', 'enddef', 'defcompile'], 'Xdef') ! call assert_fails('so Xdef', 'E1006:') ! call delete('Xdef') enddef def DictArg(arg: dict) --- 355,368 ---- assert_equal('', MyVarargsOnly()) assert_equal('one', MyVarargsOnly('one')) assert_equal('one,two', MyVarargsOnly('one', 'two')) ! CheckDefFailure(['MyVarargsOnly(1)'], 'E1013: argument 1: type mismatch, expected string but got number') ! CheckDefFailure(['MyVarargsOnly("one", 2)'], 'E1013: argument 2: type mismatch, expected string but got number') enddef def Test_using_var_as_arg() ! writefile(['def Func(x: number)', 'let x = 234', 'enddef', 'defcompile'], 'Xdef') ! assert_fails('so Xdef', 'E1006:') ! delete('Xdef') enddef def DictArg(arg: dict) *************** *** 382,393 **** ListArg(l) assert_equal('value', l[0]) ! call CheckScriptFailure(['def Func(arg: number)', 'arg = 3', 'enddef', 'defcompile'], 'E1090:') enddef def Test_call_func_defined_later() ! call assert_equal('one', g:DefinedLater('one')) ! call assert_fails('call NotDefined("one")', 'E117:') enddef func DefinedLater(arg) --- 382,393 ---- ListArg(l) assert_equal('value', l[0]) ! CheckScriptFailure(['def Func(arg: number)', 'arg = 3', 'enddef', 'defcompile'], 'E1090:') enddef def Test_call_func_defined_later() ! assert_equal('one', g:DefinedLater('one')) ! assert_fails('NotDefined("one")', 'E117:') enddef func DefinedLater(arg) *************** *** 523,529 **** def Test_error_in_nested_function() # Error in called function requires unwinding the call stack. ! assert_fails('call FuncWithForwardCall()', 'E1096:') enddef def Test_return_type_wrong() --- 523,529 ---- def Test_error_in_nested_function() # Error in called function requires unwinding the call stack. ! assert_fails('FuncWithForwardCall()', 'E1096:') enddef def Test_return_type_wrong() *************** *** 742,760 **** enddef def Test_redef_failure() ! call writefile(['def Func0(): string', 'return "Func0"', 'enddef'], 'Xdef') so Xdef ! call writefile(['def Func1(): string', 'return "Func1"', 'enddef'], 'Xdef') so Xdef ! call writefile(['def! Func0(): string', 'enddef', 'defcompile'], 'Xdef') ! call assert_fails('so Xdef', 'E1027:') ! call writefile(['def Func2(): string', 'return "Func2"', 'enddef'], 'Xdef') so Xdef ! call delete('Xdef') ! call assert_equal(0, g:Func0()) ! call assert_equal('Func1', g:Func1()) ! call assert_equal('Func2', g:Func2()) delfunc! Func0 delfunc! Func1 --- 742,760 ---- enddef def Test_redef_failure() ! writefile(['def Func0(): string', 'return "Func0"', 'enddef'], 'Xdef') so Xdef ! writefile(['def Func1(): string', 'return "Func1"', 'enddef'], 'Xdef') so Xdef ! writefile(['def! Func0(): string', 'enddef', 'defcompile'], 'Xdef') ! assert_fails('so Xdef', 'E1027:') ! writefile(['def Func2(): string', 'return "Func2"', 'enddef'], 'Xdef') so Xdef ! delete('Xdef') ! assert_equal(0, g:Func0()) ! assert_equal('Func1', g:Func1()) ! assert_equal('Func2', g:Func2()) delfunc! Func0 delfunc! Func1 *************** *** 960,969 **** 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)') ! call CheckDefFailure(['let RefWrong: func(string ,number)'], 'E1068:') ! call CheckDefFailure(['let RefWrong: func(string,number)'], 'E1069:') ! call 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:') ! call CheckDefFailure(['let RefWrong: func(bool):string'], 'E1069:') enddef def Test_func_return_type() --- 960,969 ---- 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() *************** *** 1702,1708 **** def Test_cmd_modifier() tab echo '0' ! call CheckDefFailure(['5tab echo 3'], 'E16:') enddef def Test_restore_modifiers() --- 1702,1708 ---- def Test_cmd_modifier() tab echo '0' ! CheckDefFailure(['5tab echo 3'], 'E16:') enddef def Test_restore_modifiers() *** ../vim-8.2.1622/src/testdir/test_vim9_script.vim 2020-09-04 21:18:40.492161906 +0200 --- src/testdir/test_vim9_script.vim 2020-09-06 15:54:57.019669149 +0200 *************** *** 45,57 **** let bool2: bool = false assert_equal(v:false, bool2) ! call CheckDefFailure(['let x:string'], 'E1069:') ! call CheckDefFailure(['let x:string = "x"'], 'E1069:') ! call CheckDefFailure(['let a:string = "x"'], 'E1069:') ! call CheckDefFailure(['let lambda = {-> "lambda"}'], 'E704:') let nr: number = 1234 ! call CheckDefFailure(['let nr: number = "asdf"'], 'E1012:') let a: number = 6 #comment assert_equal(6, a) --- 45,57 ---- let bool2: bool = false assert_equal(v:false, bool2) ! CheckDefFailure(['let x:string'], 'E1069:') ! CheckDefFailure(['let x:string = "x"'], 'E1069:') ! CheckDefFailure(['let a:string = "x"'], 'E1069:') ! CheckDefFailure(['let lambda = {-> "lambda"}'], 'E704:') let nr: number = 1234 ! CheckDefFailure(['let nr: number = "asdf"'], 'E1012:') let a: number = 6 #comment assert_equal(6, a) *************** *** 88,94 **** assert_equal('barfoo', $ENVVAR) $ENVVAR = '' END ! call CheckScriptSuccess(lines) s:appendToMe ..= 'yyy' assert_equal('xxxyyy', s:appendToMe) --- 88,94 ---- assert_equal('barfoo', $ENVVAR) $ENVVAR = '' END ! CheckScriptSuccess(lines) s:appendToMe ..= 'yyy' assert_equal('xxxyyy', s:appendToMe) *************** *** 175,189 **** enddef defcompile END ! call CheckScriptFailure(lines, 'E1089:') g:inc_counter += 1 assert_equal(2, g:inc_counter) $SOME_ENV_VAR ..= 'more' assert_equal('somemore', $SOME_ENV_VAR) ! call CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1051:') ! call CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1012:') lines =<< trim END @c = 'areg' --- 175,189 ---- enddef defcompile END ! CheckScriptFailure(lines, 'E1089:') g:inc_counter += 1 assert_equal(2, g:inc_counter) $SOME_ENV_VAR ..= 'more' assert_equal('somemore', $SOME_ENV_VAR) ! CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1051:') ! CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1012:') lines =<< trim END @c = 'areg' *************** *** 192,205 **** END CheckDefAndScriptSuccess(lines) ! call CheckDefFailure(['@a += "more"'], 'E1051:') ! call CheckDefFailure(['@a += 123'], 'E1012:') v:errmsg = 'none' v:errmsg ..= 'again' assert_equal('noneagain', v:errmsg) ! call CheckDefFailure(['v:errmsg += "more"'], 'E1051:') ! call CheckDefFailure(['v:errmsg += 123'], 'E1012:') # single letter variables a = 123 --- 192,205 ---- END CheckDefAndScriptSuccess(lines) ! CheckDefFailure(['@a += "more"'], 'E1051:') ! CheckDefFailure(['@a += 123'], 'E1012:') v:errmsg = 'none' v:errmsg ..= 'again' assert_equal('noneagain', v:errmsg) ! CheckDefFailure(['v:errmsg += "more"'], 'E1051:') ! CheckDefFailure(['v:errmsg += 123'], 'E1012:') # single letter variables a = 123 *************** *** 283,290 **** assert_equal(['sdf', 'asdf', 'end'], list3) ! call CheckDefExecFailure(['let ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:') ! call CheckDefExecFailure(['let [v1, v2] = [1, 2]'], 'E1092:') # type becomes list let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] --- 283,290 ---- assert_equal(['sdf', 'asdf', 'end'], list3) ! CheckDefExecFailure(['let ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:') ! CheckDefExecFailure(['let [v1, v2] = [1, 2]'], 'E1092:') # type becomes list let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] *************** *** 299,305 **** [v1, v2, v3] = [1, 2, 3] assert_equal([1, 2, 3], [v1, v2, v3]) END ! call CheckScriptSuccess(lines) enddef def Test_assignment_dict() --- 299,305 ---- [v1, v2, v3] = [1, 2, 3] assert_equal([1, 2, 3], [v1, v2, v3]) END ! CheckScriptSuccess(lines) enddef def Test_assignment_dict() *************** *** 534,622 **** enddef def Test_assignment_failure() ! call CheckDefFailure(['let var=234'], 'E1004:') ! call CheckDefFailure(['let var =234'], 'E1004:') ! call CheckDefFailure(['let var= 234'], 'E1004:') ! ! call CheckScriptFailure(['vim9script', 'let var=234'], 'E1004:') ! call CheckScriptFailure(['vim9script', 'let var=234'], "before and after '='") ! call CheckScriptFailure(['vim9script', 'let var =234'], 'E1004:') ! call CheckScriptFailure(['vim9script', 'let var= 234'], 'E1004:') ! call CheckScriptFailure(['vim9script', 'let var = 234', 'var+=234'], 'E1004:') ! call CheckScriptFailure(['vim9script', 'let var = 234', 'var+=234'], "before and after '+='") ! call CheckScriptFailure(['vim9script', 'let var = "x"', 'var..="y"'], 'E1004:') ! call CheckScriptFailure(['vim9script', 'let var = "x"', 'var..="y"'], "before and after '..='") ! ! call CheckDefFailure(['let true = 1'], 'E1034:') ! call CheckDefFailure(['let false = 1'], 'E1034:') ! ! call CheckDefFailure(['[a; b; c] = g:list'], 'E452:') ! call CheckDefExecFailure(['let a: number', ! '[a] = test_null_list()'], 'E1093:') ! call CheckDefExecFailure(['let a: number', ! '[a] = []'], 'E1093:') ! call CheckDefExecFailure(['let x: number', ! 'let y: number', ! '[x, y] = [1]'], 'E1093:') ! call CheckDefExecFailure(['let x: number', ! 'let y: number', ! 'let z: list', ! '[x, y; z] = [1]'], 'E1093:') ! ! call CheckDefFailure(['let somevar'], "E1022:") ! call CheckDefFailure(['let &tabstop = 4'], 'E1052:') ! call CheckDefFailure(['&g:option = 5'], 'E113:') ! call CheckScriptFailure(['vim9script', 'let &tabstop = 4'], 'E1052:') ! call CheckDefFailure(['let $VAR = 5'], 'E1016: Cannot declare an environment variable:') ! call CheckScriptFailure(['vim9script', 'let $ENV = "xxx"'], 'E1016:') if has('dnd') ! call CheckDefFailure(['let @~ = 5'], 'E1066:') else ! call CheckDefFailure(['let @~ = 5'], 'E354:') ! call CheckDefFailure(['@~ = 5'], 'E354:') endif ! call CheckDefFailure(['let @a = 5'], 'E1066:') ! call CheckDefFailure(['let @/ = "x"'], 'E1066:') ! call CheckScriptFailure(['vim9script', 'let @a = "abc"'], 'E1066:') ! ! call CheckDefFailure(['let g:var = 5'], 'E1016: Cannot declare a global variable:') ! call CheckDefFailure(['let w:var = 5'], 'E1016: Cannot declare a window variable:') ! call CheckDefFailure(['let b:var = 5'], 'E1016: Cannot declare a buffer variable:') ! call CheckDefFailure(['let t:var = 5'], 'E1016: Cannot declare a tab variable:') ! ! call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:') ! call CheckDefFailure(['let xnr += 4'], 'E1020:', 1) ! call CheckScriptFailure(['vim9script', 'let xnr += 4'], 'E1020:') ! call CheckDefFailure(["let xnr = xnr + 1"], 'E1001:', 1) ! call CheckScriptFailure(['vim9script', 'let xnr = xnr + 4'], 'E121:') ! ! call CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef', 'defcompile'], 'E1108:') ! ! call CheckDefFailure(['let var: list = [123]'], 'expected list but got list') ! call CheckDefFailure(['let var: list = ["xx"]'], 'expected list but got list') ! ! call CheckDefFailure(['let var: dict = #{key: 123}'], 'expected dict but got dict') ! call CheckDefFailure(['let var: dict = #{key: "xx"}'], 'expected dict but got dict') ! ! call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') ! call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') ! ! call CheckDefFailure(['let var: dict '], 'E1068:') ! call CheckDefFailure(['let var: dict', ! '[x, y; z] = [1]'], 'E1093:') ! ! CheckDefFailure(['let somevar'], "E1022:") ! CheckDefFailure(['let &tabstop = 4'], 'E1052:') ! CheckDefFailure(['&g:option = 5'], 'E113:') ! CheckScriptFailure(['vim9script', 'let &tabstop = 4'], 'E1052:') ! CheckDefFailure(['let $VAR = 5'], 'E1016: Cannot declare an environment variable:') ! CheckScriptFailure(['vim9script', 'let $ENV = "xxx"'], 'E1016:') if has('dnd') ! CheckDefFailure(['let @~ = 5'], 'E1066:') else ! CheckDefFailure(['let @~ = 5'], 'E354:') ! CheckDefFailure(['@~ = 5'], 'E354:') endif ! CheckDefFailure(['let @a = 5'], 'E1066:') ! CheckDefFailure(['let @/ = "x"'], 'E1066:') ! CheckScriptFailure(['vim9script', 'let @a = "abc"'], 'E1066:') ! ! CheckDefFailure(['let g:var = 5'], 'E1016: Cannot declare a global variable:') ! CheckDefFailure(['let w:var = 5'], 'E1016: Cannot declare a window variable:') ! CheckDefFailure(['let b:var = 5'], 'E1016: Cannot declare a buffer variable:') ! CheckDefFailure(['let t:var = 5'], 'E1016: Cannot declare a tab variable:') ! ! CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:') ! CheckDefFailure(['let xnr += 4'], 'E1020:', 1) ! CheckScriptFailure(['vim9script', 'let xnr += 4'], 'E1020:') ! CheckDefFailure(["let xnr = xnr + 1"], 'E1001:', 1) ! CheckScriptFailure(['vim9script', 'let xnr = xnr + 4'], 'E121:') ! ! CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef', 'defcompile'], 'E1108:') ! ! CheckDefFailure(['let var: list = [123]'], 'expected list but got list') ! CheckDefFailure(['let var: list = ["xx"]'], 'expected list but got list') ! ! CheckDefFailure(['let var: dict = #{key: 123}'], 'expected dict but got dict') ! CheckDefFailure(['let var: dict = #{key: "xx"}'], 'expected dict but got dict') ! ! CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') ! CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') ! ! CheckDefFailure(['let var: dict '], 'E1068:') ! CheckDefFailure(['let var: dict1234_func', 'E123:') if RunVim([], ['wq Xdidit'], '+"func 1_func"') ! call assert_equal([], readfile('Xdidit')) endif delete('Xdidit') enddef --- 3266,3272 ---- assert_fails('func 1234_func', 'E123:') if RunVim([], ['wq Xdidit'], '+"func 1_func"') ! assert_equal([], readfile('Xdidit')) endif delete('Xdidit') enddef *** ../vim-8.2.1622/src/version.c 2020-09-06 15:53:56.627809181 +0200 --- src/version.c 2020-09-06 15:56:40.175426127 +0200 *************** *** 756,757 **** --- 756,759 ---- { /* Add new patch number below this line */ + /**/ + 1623, /**/ -- Be nice to your kids... they'll be the ones choosing your nursing home. /// 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 ///