]> granicus.if.org Git - vim/commitdiff
patch 8.2.4404: Vim9: some code not covered by tests v8.2.4404
authorBram Moolenaar <Bram@vim.org>
Wed, 16 Feb 2022 21:48:25 +0000 (21:48 +0000)
committerBram Moolenaar <Bram@vim.org>
Wed, 16 Feb 2022 21:48:25 +0000 (21:48 +0000)
Problem:    Vim9: some code not covered by tests.
Solution:   Add a few specific test cases.

src/testdir/test_vim9_func.vim
src/testdir/test_vim9_import.vim
src/version.c
src/vim9execute.c

index 218b2527f55bed0e7708ff1c653b4b1e8906b4dc..9544f0b921b370a9eeeb39b3a4fb9905e9ff9781 100644 (file)
@@ -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()
index 45f64b2c400faaceab5d67e129b296a69f27116d..90e81c1eb441b6f6c27be48c16308b3c4d46bb3f 100644 (file)
@@ -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
index b788e12e3e522ed17bc4998a58eea906d11596d4..3c4e6b00f0745ea26ed00bf48fbf5f9b52141af7 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4404,
 /**/
     4403,
 /**/
index f6456d64b23e0dad3d1c5df58e5278f792b02a22..9ee795d25f566cd3b706504f16093ee60786dc26 100644 (file)
@@ -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