diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-02-16 21:48:25 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-02-16 21:48:25 +0000 |
commit | cd1cda2f877aab5ec954e14bcba59076533529a4 (patch) | |
tree | 36b7dba2c8a691a40552edb025e58e533cbdca62 | |
parent | 943773783384a5ff63f57769d37ddabf8156fe1e (diff) | |
download | vim-git-cd1cda2f877aab5ec954e14bcba59076533529a4.tar.gz |
patch 8.2.4404: Vim9: some code not covered by testsv8.2.4404
Problem: Vim9: some code not covered by tests.
Solution: Add a few specific test cases.
-rw-r--r-- | src/testdir/test_vim9_func.vim | 8 | ||||
-rw-r--r-- | src/testdir/test_vim9_import.vim | 131 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9execute.c | 10 |
4 files changed, 151 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim index 218b2527f..9544f0b92 100644 --- 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 index 45f64b2c4..90e81c1eb 100644 --- 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 index b788e12e3..3c4e6b00f 100644 --- 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 index f6456d64b..9ee795d25 100644 --- 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 |