patch 8.2.4586: Vim9: no error for using lower case name for "func" argument v8.2.4586
authorBram Moolenaar <Bram@vim.org>
Thu, 17 Mar 2022 16:30:03 +0000 (16:30 +0000)
committerBram Moolenaar <Bram@vim.org>
Thu, 17 Mar 2022 16:30:03 +0000 (16:30 +0000)
Problem:    Vim9: no error for using lower case name for "func" argument.
            (Ernie Rael)
Solution:   Check the name as soon as the type is known.

src/testdir/test_vim9_func.vim
src/userfunc.c
src/version.c

index f7be6a07f59c94cb9b3df960590284e95142b8fc..5b904faf3b6f558566a80f5d776c4d3781f2c3a3 100644 (file)
@@ -1479,12 +1479,12 @@ def Test_pass_legacy_lambda_to_def_func()
 
   lines =<< trim END
       vim9script
-      def g:TestFunc(f: func)
+      def g:TestFunc(F: func)
       enddef
       legacy call g:TestFunc({-> 0})
       delfunc g:TestFunc
 
-      def g:TestFunc(f: func(number))
+      def g:TestFunc(F: func(number))
       enddef
       legacy call g:TestFunc({nr -> 0})
       delfunc g:TestFunc
@@ -3788,8 +3788,8 @@ def Test_check_func_arg_types()
         return x + 1
       enddef
 
-      def G(g: func): dict<func>
-        return {f: g}
+      def G(Fg: func): dict<func>
+        return {f: Fg}
       enddef
 
       def H(d: dict<func>): string
@@ -3799,6 +3799,8 @@ def Test_check_func_arg_types()
 
   v9.CheckScriptSuccess(lines + ['echo H(G(F1))'])
   v9.CheckScriptFailure(lines + ['echo H(G(F2))'], 'E1013:')
+
+  v9.CheckScriptFailure(lines + ['def SomeFunc(ff: func)', 'enddef'], 'E704:')
 enddef
 
 def Test_call_func_with_null()
index 6a5d84bfd51d6905dcdbd20a1c5808f5dbdcff8d..ce2ad1301b102e019d0837efb86cd57b8bf8aa9f 100644 (file)
@@ -429,6 +429,12 @@ parse_argument_types(ufunc_T *fp, garray_T *argtypes, int varargs)
                if (type == NULL)
                    return FAIL;
                fp->uf_arg_types[i] = type;
+               if (i < fp->uf_args.ga_len
+                       && (type->tt_type == VAR_FUNC
+                           || type->tt_type == VAR_PARTIAL)
+                       && var_wrong_func_name(
+                                   ((char_u **)fp->uf_args.ga_data)[i], TRUE))
+                   return FAIL;
            }
        }
     }
index 3be87664d9242d3aacbdc8a7423153a31de703ab..b90c57123668fb8d019b15953b8249831ced2fce 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4586,
 /**/
     4585,
 /**/