To: vim_dev@googlegroups.com Subject: Patch 8.2.0699 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.0699 Problem: Vim9: not all errors tested. Solution: Add test for deleted function. Bail out on first error. Files: src/vim9execute.c, src/testdir/test_vim9_func.vim, src/testdir/test_vim9_expr.vim, src/testdir/vim9.vim *** ../vim-8.2.0698/src/vim9execute.c 2020-05-05 19:46:16.653307561 +0200 --- src/vim9execute.c 2020-05-05 21:22:52.685853228 +0200 *************** *** 432,437 **** --- 432,438 ---- { typval_T argvars[MAX_FUNC_ARGS]; int idx; + int called_emsg_before = called_emsg; if (call_prepare(argcount, argvars, ectx) == FAIL) return FAIL; *************** *** 442,447 **** --- 443,451 ---- // Clear the arguments. for (idx = 0; idx < argcount; ++idx) clear_tv(&argvars[idx]); + + if (called_emsg != called_emsg_before) + return FAIL; return OK; } *************** *** 549,555 **** if (name == NULL || call_by_name(name, argcount, ectx, NULL) == FAIL) { if (called_emsg == called_emsg_before) ! semsg(_(e_unknownfunc), name); return FAIL; } return OK; --- 553,560 ---- if (name == NULL || call_by_name(name, argcount, ectx, NULL) == FAIL) { if (called_emsg == called_emsg_before) ! semsg(_(e_unknownfunc), ! name == NULL ? (char_u *)"[unknown]" : name); return FAIL; } return OK; *** ../vim-8.2.0698/src/testdir/test_vim9_func.vim 2020-05-05 17:53:12.809623291 +0200 --- src/testdir/test_vim9_func.vim 2020-05-05 21:24:44.853442170 +0200 *************** *** 642,647 **** --- 642,664 ---- call assert_equal(1, caught_1059) endfunc + func DelMe() + echo 'DelMe' + endfunc + + 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 + def RefFunc(Ref: func(string): string): string return Ref('more') enddef *** ../vim-8.2.0698/src/testdir/test_vim9_expr.vim 2020-04-28 22:49:04.592008615 +0200 --- src/testdir/test_vim9_expr.vim 2020-05-05 21:15:07.639577579 +0200 *************** *** 759,769 **** assert_equal(g:list_mixed, [1, 'b', false]) assert_equal('b', g:list_mixed[1]) ! call CheckDefExecFailure("let x = g:anint[3]", 'E714:') call CheckDefFailure(["let x = g:list_mixed[xxx]"], 'E1001:') ! call CheckDefExecFailure("let x = g:list_mixed['xx']", 'E39:') call CheckDefFailure(["let x = g:list_mixed[0"], 'E111:') ! call CheckDefExecFailure("let x = g:list_empty[3]", 'E684:') enddef def Test_expr7_lambda() --- 759,769 ---- assert_equal(g:list_mixed, [1, 'b', false]) assert_equal('b', g:list_mixed[1]) ! call CheckDefExecFailure(["let x = g:anint[3]"], 'E714:') call CheckDefFailure(["let x = g:list_mixed[xxx]"], 'E1001:') ! call CheckDefExecFailure(["let x = g:list_mixed['xx']"], 'E39:') call CheckDefFailure(["let x = g:list_mixed[0"], 'E111:') ! call CheckDefExecFailure(["let x = g:list_empty[3]"], 'E684:') enddef def Test_expr7_lambda() *************** *** 792,799 **** call CheckDefFailure(["let x = #"], 'E1015:') call CheckDefFailure(["let x += 1"], 'E1020:') call CheckDefFailure(["let x = x + 1"], 'E1001:') ! call CheckDefExecFailure("let x = g:anint.member", 'E715:') ! call CheckDefExecFailure("let x = g:dict_empty.member", 'E716:') enddef def Test_expr_member() --- 792,799 ---- call CheckDefFailure(["let x = #"], 'E1015:') call CheckDefFailure(["let x += 1"], 'E1020:') call CheckDefFailure(["let x = x + 1"], 'E1001:') ! call CheckDefExecFailure(["let x = g:anint.member"], 'E715:') ! call CheckDefExecFailure(["let x = g:dict_empty.member"], 'E716:') enddef def Test_expr_member() *************** *** 899,906 **** call CheckDefFailure(["let x = -'xx'"], "E1030:") call CheckDefFailure(["let x = +'xx'"], "E1030:") call CheckDefFailure(["let x = -0z12"], "E974:") ! call CheckDefExecFailure("let x = -[8]", "E39:") ! call CheckDefExecFailure("let x = -{'a': 1}", "E39:") call CheckDefFailure(["let x = @"], "E1002:") call CheckDefFailure(["let x = @<"], "E354:") --- 899,906 ---- call CheckDefFailure(["let x = -'xx'"], "E1030:") call CheckDefFailure(["let x = +'xx'"], "E1030:") call CheckDefFailure(["let x = -0z12"], "E974:") ! call CheckDefExecFailure(["let x = -[8]"], "E39:") ! call CheckDefExecFailure(["let x = -{'a': 1}"], "E39:") call CheckDefFailure(["let x = @"], "E1002:") call CheckDefFailure(["let x = @<"], "E354:") *************** *** 914,936 **** call CheckDefFailure(["let x = ¬exist"], 'E113:') call CheckDefFailure(["&grepprg = [343]"], 'E1013:') ! call CheckDefExecFailure("echo s:doesnt_exist", 'E121:') ! call CheckDefExecFailure("echo g:doesnt_exist", 'E121:') call CheckDefFailure(["echo a:somevar"], 'E1075:') call CheckDefFailure(["echo l:somevar"], 'E1075:') call CheckDefFailure(["echo x:somevar"], 'E1075:') ! call CheckDefExecFailure("let x = +g:astring", 'E1030:') ! call CheckDefExecFailure("let x = +g:ablob", 'E974:') ! call CheckDefExecFailure("let x = +g:alist", 'E745:') ! call CheckDefExecFailure("let x = +g:adict", 'E728:') call CheckDefFailure(["let x = ''", "let y = x.memb"], 'E715:') ! call CheckDefExecFailure("[1, 2->len()", 'E492:') ! call CheckDefExecFailure("#{a: 1->len()", 'E488:') ! call CheckDefExecFailure("{'a': 1->len()", 'E492:') endfunc let g:Funcrefs = [function('add')] --- 914,936 ---- call CheckDefFailure(["let x = ¬exist"], 'E113:') call CheckDefFailure(["&grepprg = [343]"], 'E1013:') ! call CheckDefExecFailure(["echo s:doesnt_exist"], 'E121:') ! call CheckDefExecFailure(["echo g:doesnt_exist"], 'E121:') call CheckDefFailure(["echo a:somevar"], 'E1075:') call CheckDefFailure(["echo l:somevar"], 'E1075:') call CheckDefFailure(["echo x:somevar"], 'E1075:') ! call CheckDefExecFailure(["let x = +g:astring"], 'E1030:') ! call CheckDefExecFailure(["let x = +g:ablob"], 'E974:') ! call CheckDefExecFailure(["let x = +g:alist"], 'E745:') ! call CheckDefExecFailure(["let x = +g:adict"], 'E728:') call CheckDefFailure(["let x = ''", "let y = x.memb"], 'E715:') ! call CheckDefExecFailure(["[1, 2->len()"], 'E492:') ! call CheckDefExecFailure(["#{a: 1->len()"], 'E488:') ! call CheckDefExecFailure(["{'a': 1->len()"], 'E492:') endfunc let g:Funcrefs = [function('add')] *************** *** 986,992 **** call CheckDefFailure(["let x = '1'is2"], 'E488:') call CheckDefFailure(["let x = '1'isnot2"], 'E488:') ! call CheckDefExecFailure("CallMe ('yes')", 'E492:') call CheckDefFailure(["CallMe2('yes','no')"], 'E1069:') call CheckDefFailure(["CallMe2('yes' , 'no')"], 'E1068:') --- 986,992 ---- call CheckDefFailure(["let x = '1'is2"], 'E488:') call CheckDefFailure(["let x = '1'isnot2"], 'E488:') ! call CheckDefExecFailure(["CallMe ('yes')"], 'E492:') call CheckDefFailure(["CallMe2('yes','no')"], 'E1069:') call CheckDefFailure(["CallMe2('yes' , 'no')"], 'E1068:') *** ../vim-8.2.0698/src/testdir/vim9.vim 2020-04-25 20:02:36.001096124 +0200 --- src/testdir/vim9.vim 2020-05-05 21:15:57.375391021 +0200 *************** *** 7,12 **** --- 7,20 ---- call delete('Xdef') endfunc + " Check that "lines" inside ":def" results in an "error" message when executed. + func CheckDefExecFailure(lines, error) + call writefile(['def Func()'] + a:lines + ['enddef'], 'Xdef') + so Xdef + call assert_fails('call Func()', a:error, a:lines) + call delete('Xdef') + endfunc + def CheckScriptFailure(lines: list, error: string) writefile(lines, 'Xdef') assert_fails('so Xdef', error, lines) *************** *** 18,28 **** so Xdef delete('Xdef') enddef - - " Check that "line" inside ":def" results in an "error" message when executed. - func CheckDefExecFailure(line, error) - call writefile(['def! Func()', a:line, 'enddef'], 'Xdef') - so Xdef - call assert_fails('call Func()', a:error, a:line) - call delete('Xdef') - endfunc --- 26,28 ---- *** ../vim-8.2.0698/src/version.c 2020-05-05 19:57:15.075406752 +0200 --- src/version.c 2020-05-05 20:46:49.990353670 +0200 *************** *** 748,749 **** --- 748,751 ---- { /* Add new patch number below this line */ + /**/ + 699, /**/ -- hundred-and-one symptoms of being an internet addict: 50. The last girl you picked up was only a jpeg. /// 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 ///