changeset 33914:966a1af141b0 v9.0.2157

patch 9.0.2157: Vim9: incorrectly parses :def func definitions Commit: https://github.com/vim/vim/commit/e4a450a87ba532cbfe1c4e97cac378eaafc3ae39 Author: Christian Brabandt <cb@256bit.org> Date: Fri Dec 8 20:57:38 2023 +0100 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>
author Christian Brabandt <cb@256bit.org>
date Mon, 11 Dec 2023 18:00:02 +0100
parents a259471e74fe
children a49ae967e9ed
files src/testdir/test_vim9_func.vim src/userfunc.c src/version.c
diffstat 3 files changed, 10 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
index 47b23e85e5a309a35404ea8ca4f9fd8e42d2eeb7..27585a90490095170c27da4064092f6d1c0e86f4
GIT binary patch
literal 106745
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
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -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)
 	    {
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2157,
+/**/
     2156,
 /**/
     2155,