# HG changeset patch # User Bram Moolenaar # Date 1661004004 -7200 # Node ID 35cbea7863346fb6b53487c4ecca489087fb66af # Parent bcb7e4222d173f1f70b3f96f8b3488abbc86d4e6 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 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) diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim --- 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) diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim --- 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 diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim --- 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 diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim --- 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 diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim --- 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', diff --git a/src/version.c b/src/version.c --- 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, diff --git a/src/vim9expr.c b/src/vim9expr.c --- 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); }