# HG changeset patch # User Bram Moolenaar # Date 1645048803 -3600 # Node ID 60ac4228a73d7b21049cf10d2921e1e25521991d # Parent 370e4d6397dad681ff6713cf69559faa71975df7 patch 8.2.4404: Vim9: some code not covered by tests Commit: https://github.com/vim/vim/commit/cd1cda2f877aab5ec954e14bcba59076533529a4 Author: Bram Moolenaar Date: Wed Feb 16 21:48:25 2022 +0000 patch 8.2.4404: Vim9: some code not covered by tests Problem: Vim9: some code not covered by tests. Solution: Add a few specific test cases. diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim --- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -3226,6 +3226,14 @@ def Test_partial_call() v9.CheckScriptFailure(lines, 'E1235:') enddef +def Test_partial_double_nested() + var idx = 123 + var Get = () => idx + var Ref = function(Get, []) + var RefRef = function(Ref, []) + assert_equal(123, RefRef()) +enddef + " Using "idx" from a legacy global function does not work. " This caused a crash when called from legacy context. func Test_partial_call_fails() diff --git a/src/testdir/test_vim9_import.vim b/src/testdir/test_vim9_import.vim --- a/src/testdir/test_vim9_import.vim +++ b/src/testdir/test_vim9_import.vim @@ -1185,6 +1185,137 @@ def Test_vim9_reload_noclear() delete('XreloadScript.vim') enddef +def Test_vim_reload_noclear_arg_count() + var lines =<< trim END + vim9script noclear + + if !exists('g:didload') + def Test(a: string, b: string) + echo a b + enddef + def Call() + Test('a', 'b') + enddef + else + # redefine with one argument less + def Test(a: string) + echo a + enddef + endif + Call() + g:didload = 1 + END + lines->writefile('XreloadScript_1.vim') + source XreloadScript_1.vim + assert_fails('source XreloadScript_1.vim', 'E1106: One argument too many') + unlet g:didload + + lines =<< trim END + vim9script noclear + + if !exists('g:didload') + def Test(a: string, b: string, c: string) + echo a b + enddef + def Call() + Test('a', 'b', 'c') + enddef + else + # redefine with one argument less + def Test(a: string) + echo a + enddef + endif + Call() + g:didload = 1 + END + lines->writefile('XreloadScript_2.vim') + source XreloadScript_2.vim + assert_fails('source XreloadScript_2.vim', 'E1106: 2 arguments too many') + unlet g:didload + + lines =<< trim END + vim9script noclear + + if !exists('g:didload') + def Test(a: string) + echo a + enddef + def Call() + Test('a') + enddef + else + # redefine with one argument extra + def Test(a: string, b: string) + echo a b + enddef + endif + Call() + g:didload = 1 + END + lines->writefile('XreloadScript_3.vim') + source XreloadScript_3.vim + assert_fails('source XreloadScript_3.vim', 'E1190: One argument too few') + unlet g:didload + + lines =<< trim END + vim9script noclear + + if !exists('g:didload') + def Test(a: string) + echo a + enddef + def Call() + Test('a') + enddef + else + # redefine with two arguments extra + def Test(a: string, b: string, c: string) + echo a b + enddef + endif + Call() + g:didload = 1 + END + lines->writefile('XreloadScript_4.vim') + source XreloadScript_4.vim + assert_fails('source XreloadScript_4.vim', 'E1190: 2 arguments too few') + unlet g:didload + + delete('XreloadScript_1.vim') + delete('XreloadScript_2.vim') + delete('XreloadScript_3.vim') + delete('XreloadScript_4.vim') +enddef + +def Test_vim9_reload_noclear_error() + var lines =<< trim END + vim9script noclear + + if !exists('g:didload') + def Test(a: string) + echo a + enddef + def Call() + Test('a') + enddef + else + # redefine with a compile error + def Test(a: string) + echo ax + enddef + endif + Call() + g:didload = 1 + END + lines->writefile('XreloadScriptErr.vim') + source XreloadScriptErr.vim + assert_fails('source XreloadScriptErr.vim', 'E1001: Variable not found: ax') + + unlet g:didload + delete('XreloadScriptErr.vim') +enddef + def Test_vim9_reload_import() var lines =<< trim END vim9script diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4404, +/**/ 4403, /**/ 4402, diff --git a/src/vim9execute.c b/src/vim9execute.c --- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -367,6 +367,16 @@ call_dfunc( semsg(_(e_nr_arguments_too_many), -arg_to_add); return FAIL; } + else if (arg_to_add > ufunc->uf_def_args.ga_len) + { + int missing = arg_to_add - ufunc->uf_def_args.ga_len; + + if (missing == 1) + emsg(_(e_one_argument_too_few)); + else + semsg(_(e_nr_arguments_too_few), missing); + return FAIL; + } // Reserve space for: // - missing arguments