To: vim_dev@googlegroups.com Subject: Patch 9.0.0230 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 9.0.0230 Problem: No error for comma missing in list in :def function. Solution: Check for missing comma. (closes #10943) Files: src/vim9expr.c, src/testdir/test_vim9_expr.vim, src/testdir/test_vim9_assign.vim, src/testdir/test_vim9_disassemble.vim, src/testdir/test_vim9_func.vim, src/testdir/test_vim9_script.vim *** ../vim-9.0.0229/src/vim9expr.c 2022-08-16 16:09:53.599527502 +0100 --- src/vim9expr.c 2022-08-20 14:34:47.447637705 +0100 *************** *** 975,980 **** --- 975,981 ---- int count = 0; int is_const; int is_all_const = TRUE; // reset when non-const encountered + int must_end = FALSE; for (;;) { *************** *** 993,998 **** --- 994,1004 ---- ++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,1012 **** --- 1013,1020 ---- return FAIL; } } + else + must_end = TRUE; whitep = p; p = skipwhite(p); } *** ../vim-9.0.0229/src/testdir/test_vim9_expr.vim 2022-08-06 11:35:24.892762681 +0100 --- src/testdir/test_vim9_expr.vim 2022-08-20 14:38:54.410919106 +0100 *************** *** 1876,1884 **** if has('float') v9.CheckDefExecAndScriptFailure([ ! 'g:one = 1.0' ! 'g:two = 2.0' ! 'echo g:one % g:two' ], 'E804', 3) endif --- 1876,1884 ---- if has('float') v9.CheckDefExecAndScriptFailure([ ! 'g:one = 1.0', ! 'g:two = 2.0', ! 'echo g:one % g:two', ], 'E804', 3) endif *************** *** 2490,2495 **** --- 2490,2496 ---- 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 *** ../vim-9.0.0229/src/testdir/test_vim9_assign.vim 2022-08-20 12:07:55.098022792 +0100 --- src/testdir/test_vim9_assign.vim 2022-08-20 14:46:08.672960469 +0100 *************** *** 2128,2134 **** 'floats', 'floot', 'funcs', 'funk', 'jobs', 'jop', ! 'lists', 'last' 'numbers', 'numbar', 'strings', 'strung', 'voids', 'viod'] --- 2128,2134 ---- 'floats', 'floot', 'funcs', 'funk', 'jobs', 'jop', ! 'lists', 'last', 'numbers', 'numbar', 'strings', 'strung', 'voids', 'viod'] *************** *** 2439,2449 **** ], 'E1105:', 2) v9.CheckDefExecFailure([ ! 'g:dd = {"a": 1, 2: 2}' 'unlet g:dd[0z11]', ], 'E1029:', 2) v9.CheckDefExecFailure([ ! 'g:str = "a string"' 'unlet g:str[0]', ], 'E1148: Cannot index a string', 2) --- 2439,2449 ---- ], 'E1105:', 2) v9.CheckDefExecFailure([ ! 'g:dd = {"a": 1, 2: 2}', 'unlet g:dd[0z11]', ], 'E1029:', 2) v9.CheckDefExecFailure([ ! 'g:str = "a string"', 'unlet g:str[0]', ], 'E1148: Cannot index a string', 2) *** ../vim-9.0.0229/src/testdir/test_vim9_disassemble.vim 2022-05-22 18:25:44.000000000 +0100 --- src/testdir/test_vim9_disassemble.vim 2022-08-20 14:42:58.407382824 +0100 *************** *** 2106,2112 **** ' var aDict = {x: 2}', floatDecl, ' if ' .. case[0], ! ' echo 42' ' endif', 'enddef'], 'Xdisassemble') source Xdisassemble --- 2106,2112 ---- ' var aDict = {x: 2}', floatDecl, ' if ' .. case[0], ! ' echo 42', ' endif', 'enddef'], 'Xdisassemble') source Xdisassemble *************** *** 2163,2169 **** for case in cases writefile(['def TestCase' .. nr .. '()', ' if ' .. case[0], ! ' echo 42' ' endif', 'enddef'], 'Xdisassemble') source Xdisassemble --- 2163,2169 ---- for case in cases writefile(['def TestCase' .. nr .. '()', ' if ' .. case[0], ! ' echo 42', ' endif', 'enddef'], 'Xdisassemble') source Xdisassemble *** ../vim-9.0.0229/src/testdir/test_vim9_func.vim 2022-08-20 12:07:55.098022792 +0100 --- src/testdir/test_vim9_func.vim 2022-08-20 14:49:14.754016600 +0100 *************** *** 440,461 **** ' echo "no return"', ' else', ' return 0', ! ' endif' 'enddef'], 'E1027:') v9.CheckDefFailure(['def Missing(): number', ' if g:cond', ' return 1', ' else', ' echo "no return"', ! ' endif' 'enddef'], 'E1027:') v9.CheckDefFailure(['def Missing(): number', ' if g:cond', ' return 1', ' else', ' return 2', ! ' endif' ! ' return 3' 'enddef'], 'E1095:') enddef --- 440,461 ---- ' echo "no return"', ' else', ' return 0', ! ' endif', 'enddef'], 'E1027:') v9.CheckDefFailure(['def Missing(): number', ' if g:cond', ' return 1', ' else', ' echo "no return"', ! ' endif', 'enddef'], 'E1027:') v9.CheckDefFailure(['def Missing(): number', ' if g:cond', ' return 1', ' else', ' return 2', ! ' endif', ! ' return 3', 'enddef'], 'E1095:') enddef *************** *** 1496,1502 **** def Test_lambda_uses_assigned_var() v9.CheckDefSuccess([ ! 'var x: any = "aaa"' 'x = filter(["bbb"], (_, v) => v =~ x)']) enddef --- 1496,1502 ---- def Test_lambda_uses_assigned_var() v9.CheckDefSuccess([ ! 'var x: any = "aaa"', 'x = filter(["bbb"], (_, v) => v =~ x)']) enddef *** ../vim-9.0.0229/src/testdir/test_vim9_script.vim 2022-08-18 13:28:27.724128103 +0100 --- src/testdir/test_vim9_script.vim 2022-08-20 14:48:10.585696442 +0100 *************** *** 3274,3280 **** v9.CheckScriptSuccess([ 'vim9script', ! 'new' 'setline(1, ["# define pat", "last"])', ':$', 'dsearch /pat/ #comment', --- 3274,3280 ---- v9.CheckScriptSuccess([ 'vim9script', ! 'new', 'setline(1, ["# define pat", "last"])', ':$', 'dsearch /pat/ #comment', *************** *** 3283,3289 **** v9.CheckScriptFailure([ 'vim9script', ! 'new' 'setline(1, ["# define pat", "last"])', ':$', 'dsearch /pat/#comment', --- 3283,3289 ---- v9.CheckScriptFailure([ 'vim9script', ! 'new', 'setline(1, ["# define pat", "last"])', ':$', 'dsearch /pat/#comment', *** ../vim-9.0.0229/src/version.c 2022-08-20 12:07:55.098022792 +0100 --- src/version.c 2022-08-20 14:35:40.175479472 +0100 *************** *** 733,734 **** --- 733,736 ---- { /* Add new patch number below this line */ + /**/ + 230, /**/ -- [SIR LAUNCELOT runs back up the stairs, grabs a rope of the wall and swings out over the heads of the CROWD in a swashbuckling manner towards a large window. He stops just short of the window and is left swing pathetically back and forth.] LAUNCELOT: Excuse me ... could somebody give me a push ... "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///