To: vim_dev@googlegroups.com Subject: Patch 8.1.2401 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.1.2401 Problem: :cexpr does not handle | in expression. Solution: Remove EX_TRLBAR and set nextcmd pointer. Files: src/testdir/test_quickfix.vim, src/ex_cmds.h, src/quickfix.c *** ../vim-8.1.2400/src/testdir/test_quickfix.vim 2019-11-29 22:06:44.229570907 +0100 --- src/testdir/test_quickfix.vim 2019-12-06 21:09:53.843048446 +0100 *************** *** 100,106 **** " Populate the list and then try Xgetexpr ['non-error 1', 'Xtestfile1:1:3:Line1', \ 'non-error 2', 'Xtestfile2:2:2:Line2', ! \ 'non-error 3', 'Xtestfile3:3:1:Line3'] " List only valid entries let l = split(execute('Xlist', ''), "\n") --- 100,106 ---- " Populate the list and then try Xgetexpr ['non-error 1', 'Xtestfile1:1:3:Line1', \ 'non-error 2', 'Xtestfile2:2:2:Line2', ! \ 'non-error| 3', 'Xtestfile3:3:1:Line3'] " List only valid entries let l = split(execute('Xlist', ''), "\n") *************** *** 112,118 **** let l = split(execute('Xlist!', ''), "\n") call assert_equal([' 1: non-error 1', ' 2 Xtestfile1:1 col 3: Line1', \ ' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2', ! \ ' 5: non-error 3', ' 6 Xtestfile3:3 col 1: Line3'], l) " List a range of errors let l = split(execute('Xlist 3,6', ''), "\n") --- 112,118 ---- let l = split(execute('Xlist!', ''), "\n") call assert_equal([' 1: non-error 1', ' 2 Xtestfile1:1 col 3: Line1', \ ' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2', ! \ ' 5: non-error| 3', ' 6 Xtestfile3:3 col 1: Line3'], l) " List a range of errors let l = split(execute('Xlist 3,6', ''), "\n") *************** *** 556,562 **** Xexpr "" call assert_equal(0, g:Xgetlist({'idx' : 0}).idx) call assert_equal(0, g:Xgetlist({'size' : 0}).size) ! Xaddexpr ['foo', 'bar', 'baz', 'quux', 'shmoo'] call assert_equal(5, g:Xgetlist({'size' : 0}).size) Xlast call assert_equal(5, g:Xgetlist({'idx' : 0}).idx) --- 556,562 ---- Xexpr "" call assert_equal(0, g:Xgetlist({'idx' : 0}).idx) call assert_equal(0, g:Xgetlist({'size' : 0}).size) ! Xaddexpr ['foo', 'bar', 'baz', 'quux', 'sh|moo'] call assert_equal(5, g:Xgetlist({'size' : 0}).size) Xlast call assert_equal(5, g:Xgetlist({'idx' : 0}).idx) *************** *** 4650,4662 **** \ "Xfile3:1:X3_L1\n" . \ "Entering dir c\n" . \ "Xfile4:2:X4_L2\n" . ! \ "Leaving dir c\n" . ! \ "Leaving dir Xtestdir\n" set efm=%DEntering\ dir\ %f,%XLeaving\ dir\ %f,%f:%l:%m ! cexpr lines call assert_equal(11, getqflist({'size' : 0}).size) call assert_equal(4, getqflist({'idx' : 0}).idx) call assert_equal('X2_L2', getline('.')) cnext call assert_equal(6, getqflist({'idx' : 0}).idx) call assert_equal('X1_L2', getline('.')) --- 4650,4662 ---- \ "Xfile3:1:X3_L1\n" . \ "Entering dir c\n" . \ "Xfile4:2:X4_L2\n" . ! \ "Leaving dir c\n" set efm=%DEntering\ dir\ %f,%XLeaving\ dir\ %f,%f:%l:%m ! cexpr lines .. "Leaving dir Xtestdir|\n" | let next = 1 call assert_equal(11, getqflist({'size' : 0}).size) call assert_equal(4, getqflist({'idx' : 0}).idx) call assert_equal('X2_L2', getline('.')) + call assert_equal(1, next) cnext call assert_equal(6, getqflist({'idx' : 0}).idx) call assert_equal('X1_L2', getline('.')) *** ../vim-8.1.2400/src/ex_cmds.h 2019-09-19 23:21:48.233926270 +0200 --- src/ex_cmds.h 2019-12-06 21:02:00.929244730 +0100 *************** *** 254,260 **** EX_RANGE|EX_WORD1|EX_TRLBAR, ADDR_OTHER), EXCMD(CMD_caddexpr, "caddexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_TRLBAR, ADDR_NONE), EXCMD(CMD_caddfile, "caddfile", ex_cfile, EX_TRLBAR|EX_FILE1, --- 254,260 ---- EX_RANGE|EX_WORD1|EX_TRLBAR, ADDR_OTHER), EXCMD(CMD_caddexpr, "caddexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM, ADDR_NONE), EXCMD(CMD_caddfile, "caddfile", ex_cfile, EX_TRLBAR|EX_FILE1, *************** *** 296,302 **** EX_TRLBAR|EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_MODIFY, ADDR_LINES), EXCMD(CMD_cexpr, "cexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_TRLBAR|EX_BANG, ADDR_NONE), EXCMD(CMD_cfile, "cfile", ex_cfile, EX_TRLBAR|EX_FILE1|EX_BANG, --- 296,302 ---- EX_TRLBAR|EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_MODIFY, ADDR_LINES), EXCMD(CMD_cexpr, "cexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_BANG, ADDR_NONE), EXCMD(CMD_cfile, "cfile", ex_cfile, EX_TRLBAR|EX_FILE1|EX_BANG, *************** *** 314,320 **** EX_RANGE|EX_WORD1|EX_TRLBAR, ADDR_OTHER), EXCMD(CMD_cgetexpr, "cgetexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_TRLBAR, ADDR_NONE), EXCMD(CMD_chdir, "chdir", ex_cd, EX_BANG|EX_FILE1|EX_TRLBAR|EX_CMDWIN, --- 314,320 ---- EX_RANGE|EX_WORD1|EX_TRLBAR, ADDR_OTHER), EXCMD(CMD_cgetexpr, "cgetexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM, ADDR_NONE), EXCMD(CMD_chdir, "chdir", ex_cd, EX_BANG|EX_FILE1|EX_TRLBAR|EX_CMDWIN, *************** *** 746,752 **** EX_EXTRA|EX_TRLBAR|EX_CMDWIN, ADDR_NONE), EXCMD(CMD_laddexpr, "laddexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_TRLBAR, ADDR_NONE), EXCMD(CMD_laddbuffer, "laddbuffer", ex_cbuffer, EX_RANGE|EX_WORD1|EX_TRLBAR, --- 746,752 ---- EX_EXTRA|EX_TRLBAR|EX_CMDWIN, ADDR_NONE), EXCMD(CMD_laddexpr, "laddexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM, ADDR_NONE), EXCMD(CMD_laddbuffer, "laddbuffer", ex_cbuffer, EX_RANGE|EX_WORD1|EX_TRLBAR, *************** *** 797,803 **** EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN, ADDR_NONE), EXCMD(CMD_lexpr, "lexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_TRLBAR|EX_BANG, ADDR_NONE), EXCMD(CMD_lfile, "lfile", ex_cfile, EX_TRLBAR|EX_FILE1|EX_BANG, --- 797,803 ---- EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN, ADDR_NONE), EXCMD(CMD_lexpr, "lexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_BANG, ADDR_NONE), EXCMD(CMD_lfile, "lfile", ex_cfile, EX_TRLBAR|EX_FILE1|EX_BANG, *************** *** 815,821 **** EX_RANGE|EX_WORD1|EX_TRLBAR, ADDR_OTHER), EXCMD(CMD_lgetexpr, "lgetexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_TRLBAR, ADDR_NONE), EXCMD(CMD_lgrep, "lgrep", ex_make, EX_RANGE|EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_XFILE, --- 815,821 ---- EX_RANGE|EX_WORD1|EX_TRLBAR, ADDR_OTHER), EXCMD(CMD_lgetexpr, "lgetexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM, ADDR_NONE), EXCMD(CMD_lgrep, "lgrep", ex_make, EX_RANGE|EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_XFILE, *** ../vim-8.1.2400/src/quickfix.c 2019-12-05 21:10:33.723533573 +0100 --- src/quickfix.c 2019-12-06 21:10:07.662979794 +0100 *************** *** 7548,7554 **** // Evaluate the expression. When the result is a string or a list we can // use it to fill the errorlist. ! tv = eval_expr(eap->arg, NULL); if (tv != NULL) { if ((tv->v_type == VAR_STRING && tv->vval.v_string != NULL) --- 7548,7554 ---- // Evaluate the expression. When the result is a string or a list we can // use it to fill the errorlist. ! tv = eval_expr(eap->arg, &eap->nextcmd); if (tv != NULL) { if ((tv->v_type == VAR_STRING && tv->vval.v_string != NULL) *** ../vim-8.1.2400/src/version.c 2019-12-06 20:43:22.833354093 +0100 --- src/version.c 2019-12-06 21:00:39.005542157 +0100 *************** *** 744,745 **** --- 744,747 ---- { /* Add new patch number below this line */ + /**/ + 2401, /**/ -- panic("Foooooooood fight!"); -- In the kernel source aha1542.c, after detecting a bad segment list /// 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 ///