diff options
Diffstat (limited to 'src/userfunc.c')
-rw-r--r-- | src/userfunc.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/userfunc.c b/src/userfunc.c index 127588469a..47c3161512 100644 --- a/src/userfunc.c +++ b/src/userfunc.c @@ -86,12 +86,23 @@ one_function_arg( return arg; } - // Vim9 script: cannot use script var name for argument. In function: also - // check local vars and arguments. - if (!skip && argtypes != NULL && check_defined(arg, p - arg, - evalarg == NULL ? NULL : evalarg->eval_cctx, + // Extra checks in Vim9 script. + if (!skip && argtypes != NULL) + { + int c = *p; + *p = NUL; + int r = check_reserved_name(arg, FALSE); + *p = c; + if (r == FAIL) + return arg; + + // Cannot use script var name for argument. In function: also check + // local vars and arguments. + if (check_defined(arg, p - arg, + evalarg == NULL ? NULL : evalarg->eval_cctx, eap == NULL ? NULL : eap->cstack, TRUE) == FAIL) - return arg; + return arg; + } if (newargs != NULL && ga_grow(newargs, 1) == FAIL) return arg; |