Mercurial > vim
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);