To: vim_dev@googlegroups.com Subject: Patch 8.2.2199 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.2200 Problem: Vim9: lambda without white space around -> is confusing. Solution: Require white space in a :def funtion. (issue #7503) Files: src/vim9compile.c, src/testdir/test_vim9_expr.vim, src/testdir/test_vim9_disassemble.vim *** ../vim-8.2.2199/src/vim9compile.c 2020-12-22 18:56:52.055797690 +0100 --- src/vim9compile.c 2020-12-23 20:23:19.102336162 +0100 *************** *** 3915,3928 **** * Dictionary: {'key': val, 'key': val} */ case '{': { ! char_u *start = skipwhite(*arg + 1); ! garray_T ga_arg; // Find out what comes after the arguments. ! ret = get_function_args(&start, '-', NULL, &ga_arg, TRUE, NULL, NULL, TRUE, NULL, NULL); ! if (ret != FAIL && *start == '>') ret = compile_lambda(arg, cctx); else ret = compile_dict(arg, cctx, ppconst); --- 3915,3933 ---- * Dictionary: {'key': val, 'key': val} */ case '{': { ! char_u *start = skipwhite(*arg + 1); ! char_u *after = start; ! garray_T ga_arg; // Find out what comes after the arguments. ! ret = get_function_args(&after, '-', NULL, &ga_arg, TRUE, NULL, NULL, TRUE, NULL, NULL); ! if (ret != FAIL && after[0] == '>' ! && ((after > start + 2 ! && VIM_ISWHITE(after[-2])) ! || after == start + 1) ! && IS_WHITE_OR_NUL(after[1])) ret = compile_lambda(arg, cctx); else ret = compile_dict(arg, cctx, ppconst); *** ../vim-8.2.2199/src/testdir/test_vim9_expr.vim 2020-12-15 21:41:53.141431375 +0100 --- src/testdir/test_vim9_expr.vim 2020-12-23 20:25:07.121990643 +0100 *************** *** 1863,1868 **** --- 1863,1872 ---- END CheckDefAndScriptSuccess(lines) + CheckDefFailure(["var Ref = {a->a + 1}"], 'E720:') + CheckDefFailure(["var Ref = {a-> a + 1}"], 'E720:') + CheckDefFailure(["var Ref = {a ->a + 1}"], 'E720:') + CheckDefFailure(["filter([1, 2], {k,v -> 1})"], 'E1069:', 1) # error is in first line of the lambda CheckDefFailure(["var L = {a -> a + b}"], 'E1001:', 0) *************** *** 2538,2544 **** call CheckDefFailure(["'yes'->", "Echo()"], 'E488: Trailing characters: ->', 1) call CheckDefExecFailure(["[1, 2->len()"], 'E697:', 2) ! call CheckDefExecFailure(["{a: 1->len()"], 'E451:', 1) call CheckDefExecFailure(["{['a']: 1->len()"], 'E723:', 2) endfunc --- 2542,2548 ---- call CheckDefFailure(["'yes'->", "Echo()"], 'E488: Trailing characters: ->', 1) call CheckDefExecFailure(["[1, 2->len()"], 'E697:', 2) ! call CheckDefExecFailure(["{a: 1->len()"], 'E723:', 2) call CheckDefExecFailure(["{['a']: 1->len()"], 'E723:', 2) endfunc *** ../vim-8.2.2199/src/testdir/test_vim9_disassemble.vim 2020-12-21 17:30:46.941668485 +0100 --- src/testdir/test_vim9_disassemble.vim 2020-12-23 20:26:09.673788774 +0100 *************** *** 1541,1550 **** ['{a: 1} is aDict', 'COMPAREDICT is'], ['{a: 1} isnot aDict', 'COMPAREDICT isnot'], ! ['{->33} == {->44}', 'COMPAREFUNC =='], ! ['{->33} != {->44}', 'COMPAREFUNC !='], ! ['{->33} is {->44}', 'COMPAREFUNC is'], ! ['{->33} isnot {->44}', 'COMPAREFUNC isnot'], ['77 == g:xx', 'COMPAREANY =='], ['77 != g:xx', 'COMPAREANY !='], --- 1541,1550 ---- ['{a: 1} is aDict', 'COMPAREDICT is'], ['{a: 1} isnot aDict', 'COMPAREDICT isnot'], ! ['{-> 33} == {-> 44}', 'COMPAREFUNC =='], ! ['{-> 33} != {-> 44}', 'COMPAREFUNC !='], ! ['{-> 33} is {-> 44}', 'COMPAREFUNC is'], ! ['{-> 33} isnot {-> 44}', 'COMPAREFUNC isnot'], ['77 == g:xx', 'COMPAREANY =='], ['77 != g:xx', 'COMPAREANY !='], *** ../vim-8.2.2199/src/version.c 2020-12-23 18:54:53.569837273 +0100 --- src/version.c 2020-12-23 20:20:16.114910167 +0100 *************** *** 752,753 **** --- 752,755 ---- { /* Add new patch number below this line */ + /**/ + 2200, /**/ -- When a fly lands on the ceiling, does it do a half roll or a half loop? /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///