changeset 29782:35cbea786334 v9.0.0230

patch 9.0.0230: no error for comma missing in list in :def function Commit: https://github.com/vim/vim/commit/2984ed31d92f7da19b3dc86b37764c55669dd7c2 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Aug 20 14:51:17 2022 +0100 patch 9.0.0230: no error for comma missing in list in :def function Problem: No error for comma missing in list in :def function. Solution: Check for missing comma. (closes https://github.com/vim/vim/issues/10943)
author Bram Moolenaar <Bram@vim.org>
date Sat, 20 Aug 2022 16:00:04 +0200
parents bcb7e4222d17
children 9b0585023aff
files src/testdir/test_vim9_assign.vim src/testdir/test_vim9_disassemble.vim src/testdir/test_vim9_expr.vim src/testdir/test_vim9_func.vim src/testdir/test_vim9_script.vim src/version.c src/vim9expr.c
diffstat 7 files changed, 26 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -2128,7 +2128,7 @@ def Test_var_declaration_fails()
                'floats', 'floot',
                'funcs', 'funk',
                'jobs', 'jop',
-               'lists', 'last'
+               'lists', 'last',
                'numbers', 'numbar',
                'strings', 'strung',
                'voids', 'viod']
@@ -2439,11 +2439,11 @@ def Test_unlet()
     ], 'E1105:', 2)
 
   v9.CheckDefExecFailure([
-    'g:dd = {"a": 1, 2: 2}'
+    'g:dd = {"a": 1, 2: 2}',
     'unlet g:dd[0z11]',
     ], 'E1029:', 2)
   v9.CheckDefExecFailure([
-    'g:str = "a string"'
+    'g:str = "a string"',
     'unlet g:str[0]',
     ], 'E1148: Cannot index a string', 2)
 
--- a/src/testdir/test_vim9_disassemble.vim
+++ b/src/testdir/test_vim9_disassemble.vim
@@ -2106,7 +2106,7 @@ def Test_disassemble_compare()
              '  var aDict = {x: 2}',
              floatDecl,
              '  if ' .. case[0],
-             '    echo 42'
+             '    echo 42',
              '  endif',
              'enddef'], 'Xdisassemble')
     source Xdisassemble
@@ -2163,7 +2163,7 @@ def Test_disassemble_compare_const()
   for case in cases
     writefile(['def TestCase' .. nr .. '()',
              '  if ' .. case[0],
-             '    echo 42'
+             '    echo 42',
              '  endif',
              'enddef'], 'Xdisassemble')
     source Xdisassemble
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -1876,9 +1876,9 @@ def Test_expr7()
 
   if has('float')
     v9.CheckDefExecAndScriptFailure([
-          'g:one = 1.0'
-          'g:two = 2.0'
-          'echo g:one % g:two'
+          'g:one = 1.0',
+          'g:two = 2.0',
+          'echo g:one % g:two',
           ], 'E804', 3)
   endif
 
@@ -2490,6 +2490,7 @@ def Test_expr9_lambda()
 
   v9.CheckDefAndScriptSuccess(['var Fx = (a) => [0,', ' 1]'])
   v9.CheckDefAndScriptFailure(['var Fx = (a) => [0', ' 1]'], 'E696:', 2)
+  v9.CheckDefAndScriptFailure(['var l = [1 2]'], 'E696:', 1)
 
   # no error for existing script variable when checking for lambda
   lines =<< trim END
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -440,22 +440,22 @@ def Test_missing_return()
                    '    echo "no return"',
                    '  else',
                    '    return 0',
-                   '  endif'
+                   '  endif',
                    'enddef'], 'E1027:')
   v9.CheckDefFailure(['def Missing(): number',
                    '  if g:cond',
                    '    return 1',
                    '  else',
                    '    echo "no return"',
-                   '  endif'
+                   '  endif',
                    'enddef'], 'E1027:')
   v9.CheckDefFailure(['def Missing(): number',
                    '  if g:cond',
                    '    return 1',
                    '  else',
                    '    return 2',
-                   '  endif'
-                   '  return 3'
+                   '  endif',
+                   '  return 3',
                    'enddef'], 'E1095:')
 enddef
 
@@ -1496,7 +1496,7 @@ enddef
 
 def Test_lambda_uses_assigned_var()
   v9.CheckDefSuccess([
-        'var x: any = "aaa"'
+        'var x: any = "aaa"',
         'x = filter(["bbb"], (_, v) => v =~ x)'])
 enddef
 
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -3274,7 +3274,7 @@ def Test_vim9_comment_not_compiled()
 
   v9.CheckScriptSuccess([
       'vim9script',
-      'new'
+      'new',
       'setline(1, ["# define pat", "last"])',
       ':$',
       'dsearch /pat/ #comment',
@@ -3283,7 +3283,7 @@ def Test_vim9_comment_not_compiled()
 
   v9.CheckScriptFailure([
       'vim9script',
-      'new'
+      'new',
       'setline(1, ["# define pat", "last"])',
       ':$',
       'dsearch /pat/#comment',
--- a/src/version.c
+++ b/src/version.c
@@ -732,6 +732,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    230,
+/**/
     229,
 /**/
     228,
--- a/src/vim9expr.c
+++ b/src/vim9expr.c
@@ -975,6 +975,7 @@ compile_list(char_u **arg, cctx_T *cctx,
     int		count = 0;
     int		is_const;
     int		is_all_const = TRUE;	// reset when non-const encountered
+    int		must_end = FALSE;
 
     for (;;)
     {
@@ -993,6 +994,11 @@ compile_list(char_u **arg, cctx_T *cctx,
 	    ++p;
 	    break;
 	}
+	if (must_end)
+	{
+	    semsg(_(e_missing_comma_in_list_str), p);
+	    return FAIL;
+	}
 	if (compile_expr0_ext(&p, cctx, &is_const) == FAIL)
 	    return FAIL;
 	if (!is_const)
@@ -1007,6 +1013,8 @@ compile_list(char_u **arg, cctx_T *cctx,
 		return FAIL;
 	    }
 	}
+	else
+	    must_end = TRUE;
 	whitep = p;
 	p = skipwhite(p);
     }