mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
patch 9.0.2157: Vim9: incorrectly parses :def func definitions
Problem: Vim9: incorrectly parses :def func definitions Solution: check for more context when parsing function args Signed-off-by: Christian Brabandt <cb@256bit.org> Incorrectly parses def function definitions Vim currently allows to define the following vim9 function: def Func(f= ) enddef It currently thinks a Lambda is following the `=` but it doesn't check, that there is actually an expression following. So when such a think is encountered, remember that an expression should be following. If no expression is coming in the next few lines, fail parsing the function arguments, which will Vim no longer accept such a function. Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
@@ -243,6 +243,7 @@ get_function_args(
|
||||
int c;
|
||||
int any_default = FALSE;
|
||||
char_u *whitep = *argp;
|
||||
int need_expr = FALSE;
|
||||
|
||||
if (newargs != NULL)
|
||||
ga_init2(newargs, sizeof(char_u *), 3);
|
||||
@@ -282,7 +283,7 @@ get_function_args(
|
||||
semsg(_(e_invalid_argument_str), *argp);
|
||||
goto err_ret;
|
||||
}
|
||||
if (*p == endchar)
|
||||
if (*p == endchar && !need_expr)
|
||||
break;
|
||||
|
||||
if (p[0] == '.' && p[1] == '.' && p[2] == '.')
|
||||
@@ -435,6 +436,8 @@ get_function_args(
|
||||
if (ga_grow(default_args, 1) == FAIL)
|
||||
goto err_ret;
|
||||
|
||||
if (need_expr)
|
||||
need_expr = FALSE;
|
||||
// trim trailing whitespace
|
||||
while (p > expr && VIM_ISWHITE(p[-1]))
|
||||
p--;
|
||||
@@ -453,7 +456,11 @@ get_function_args(
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mustend = TRUE;
|
||||
if (*skipwhite(p) == NUL)
|
||||
need_expr = TRUE;
|
||||
}
|
||||
}
|
||||
else if (any_default)
|
||||
{
|
||||
|
Reference in New Issue
Block a user