]> granicus.if.org Git - vim/commitdiff
patch 8.2.2745: Vim9: missing part of the argument change v8.2.2745
authorBram Moolenaar <Bram@vim.org>
Sat, 10 Apr 2021 15:46:52 +0000 (17:46 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 10 Apr 2021 15:46:52 +0000 (17:46 +0200)
Problem:    Vim9: missing part of the argument change.
Solution:   Add missing changes.

src/userfunc.c
src/version.c

index 8d06b4916c2f3ffcc6c826925b0fcc302e7fd9ac..018542681afb162b0167a8f397486acf94d10b0a 100644 (file)
@@ -55,7 +55,7 @@ func_tbl_get(void)
 
 /*
  * Get one function argument.
- * If "argtypes" is not NULL also get the type: "arg: type".
+ * If "argtypes" is not NULL also get the type: "arg: type" (:def function).
  * If "types_optional" is TRUE a missing type is OK, use "any".
  * If "evalarg" is not NULL use it to check for an already declared name.
  * Return a pointer to after the type.
@@ -73,6 +73,7 @@ one_function_arg(
 {
     char_u     *p = arg;
     char_u     *arg_copy = NULL;
+    int                is_underscore = FALSE;
 
     while (ASCII_ISALNUM(*p) || *p == '_')
        ++p;
@@ -107,15 +108,16 @@ one_function_arg(
            *p = c;
            return arg;
        }
-
-       // Check for duplicate argument name.
-       for (i = 0; i < newargs->ga_len; ++i)
-           if (STRCMP(((char_u **)(newargs->ga_data))[i], arg_copy) == 0)
-           {
-               semsg(_("E853: Duplicate argument name: %s"), arg_copy);
-               vim_free(arg_copy);
-               return arg;
-           }
+       is_underscore = arg_copy[0] == '_' && arg_copy[1] == NUL;
+       if (argtypes != NULL && !is_underscore)
+           // Check for duplicate argument name.
+           for (i = 0; i < newargs->ga_len; ++i)
+               if (STRCMP(((char_u **)(newargs->ga_data))[i], arg_copy) == 0)
+               {
+                   semsg(_("E853: Duplicate argument name: %s"), arg_copy);
+                   vim_free(arg_copy);
+                   return arg;
+               }
        ((char_u **)(newargs->ga_data))[newargs->ga_len] = arg_copy;
        newargs->ga_len++;
 
@@ -146,7 +148,7 @@ one_function_arg(
            if (!skip)
                type = vim_strnsave(type, p - type);
        }
-       else if (*skipwhite(p) != '=' && !types_optional)
+       else if (*skipwhite(p) != '=' && !types_optional && !is_underscore)
        {
            semsg(_(e_missing_argument_type_for_str),
                                            arg_copy == NULL ? arg : arg_copy);
index d5a9dc7968a785760f2a0352b39ee6fb5a9b9e64..346b5d1f0d1d1d64db7992ab6e296930f4a74ae4 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2745,
 /**/
     2744,
 /**/