0
0
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:
Christian Brabandt
2023-12-08 20:57:38 +01:00
parent 9ed53752df
commit e4a450a87b
3 changed files with 17 additions and 1 deletions

View File

@@ -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)
{