changeset 24410:25db91a3281b v8.2.2745

patch 8.2.2745: Vim9: missing part of the argument change Commit: https://github.com/vim/vim/commit/51e7e78de7320a734ddc2d7931e767bccaf7e6f2 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Apr 10 17:46:52 2021 +0200 patch 8.2.2745: Vim9: missing part of the argument change Problem: Vim9: missing part of the argument change. Solution: Add missing changes.
author Bram Moolenaar <Bram@vim.org>
date Sat, 10 Apr 2021 18:00:03 +0200
parents 0ded37d8882b
children ee92164bcb76
files src/userfunc.c src/version.c
diffstat 2 files changed, 15 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -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);
--- 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 */
 /**/
+    2745,
+/**/
     2744,
 /**/
     2743,