changeset 20253:6f9010b6f7f9 v8.2.0682

patch 8.2.0682: Vim9: parsing function argument type can get stuck Commit: https://github.com/vim/vim/commit/1c0d44f8efae36c079cb8be395785827aa0b2737 Author: Bram Moolenaar <Bram@vim.org> Date: Sat May 2 19:04:58 2020 +0200 patch 8.2.0682: Vim9: parsing function argument type can get stuck Problem: Vim9: parsing function argument type can get stuck. Solution: Bail out when not making progress.
author Bram Moolenaar <Bram@vim.org>
date Sat, 02 May 2020 19:15:04 +0200
parents b5a5cffac014
children c7a2968adc24
files src/testdir/test_vim9_func.vim src/version.c src/vim9compile.c
diffstat 3 files changed, 7 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -113,6 +113,7 @@ def Test_call_wrong_args()
   call CheckDefFailure(['TakesOneArg()'], 'E119:')
   call CheckDefFailure(['TakesOneArg(11, 22)'], 'E118:')
   call CheckDefFailure(['bufnr(xxx)'], 'E1001:')
+  call CheckScriptFailure(['def Func(Ref: func(s: string))'], 'E475:')
 enddef
 
 " Default arg and varargs
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    682,
+/**/
     681,
 /**/
     680,
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -1663,7 +1663,11 @@ skip_type(char_u *start)
 	++p;
 	while (*p != ')' && *p != NUL)
 	{
+	    char_u *sp = p;
+
 	    p = skip_type(p);
+	    if (p == sp)
+		return p;  // syntax error
 	    if (*p == ',')
 		p = skipwhite(p + 1);
 	}