]> granicus.if.org Git - vim/commitdiff
patch 8.1.2401: :cexpr does not handle | in expression v8.1.2401
authorBram Moolenaar <Bram@vim.org>
Fri, 6 Dec 2019 20:11:39 +0000 (21:11 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 6 Dec 2019 20:11:39 +0000 (21:11 +0100)
Problem:    :cexpr does not handle | in expression.
Solution:   Remove EX_TRLBAR and set nextcmd pointer.

src/ex_cmds.h
src/quickfix.c
src/testdir/test_quickfix.vim
src/version.c

index 09d62a9c8fd149d4582d5cac6e4399e7360e8731..983378ccc2b8feec7d6914fa375b6f45e1a80add 100644 (file)
@@ -254,7 +254,7 @@ EXCMD(CMD_caddbuffer,       "caddbuffer",   ex_cbuffer,
        EX_RANGE|EX_WORD1|EX_TRLBAR,
        ADDR_OTHER),
 EXCMD(CMD_caddexpr,    "caddexpr",     ex_cexpr,
-       EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_TRLBAR,
+       EX_NEEDARG|EX_WORD1|EX_NOTRLCOM,
        ADDR_NONE),
 EXCMD(CMD_caddfile,    "caddfile",     ex_cfile,
        EX_TRLBAR|EX_FILE1,
@@ -296,7 +296,7 @@ EXCMD(CMD_center,   "center",       ex_align,
        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,
+       EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_BANG,
        ADDR_NONE),
 EXCMD(CMD_cfile,       "cfile",        ex_cfile,
        EX_TRLBAR|EX_FILE1|EX_BANG,
@@ -314,7 +314,7 @@ EXCMD(CMD_cgetbuffer,       "cgetbuffer",   ex_cbuffer,
        EX_RANGE|EX_WORD1|EX_TRLBAR,
        ADDR_OTHER),
 EXCMD(CMD_cgetexpr,    "cgetexpr",     ex_cexpr,
-       EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_TRLBAR,
+       EX_NEEDARG|EX_WORD1|EX_NOTRLCOM,
        ADDR_NONE),
 EXCMD(CMD_chdir,       "chdir",        ex_cd,
        EX_BANG|EX_FILE1|EX_TRLBAR|EX_CMDWIN,
@@ -746,7 +746,7 @@ EXCMD(CMD_language, "language",     ex_language,
        EX_EXTRA|EX_TRLBAR|EX_CMDWIN,
        ADDR_NONE),
 EXCMD(CMD_laddexpr,    "laddexpr",     ex_cexpr,
-       EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_TRLBAR,
+       EX_NEEDARG|EX_WORD1|EX_NOTRLCOM,
        ADDR_NONE),
 EXCMD(CMD_laddbuffer,  "laddbuffer",   ex_cbuffer,
        EX_RANGE|EX_WORD1|EX_TRLBAR,
@@ -797,7 +797,7 @@ EXCMD(CMD_let,              "let",          ex_let,
        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,
+       EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_BANG,
        ADDR_NONE),
 EXCMD(CMD_lfile,       "lfile",        ex_cfile,
        EX_TRLBAR|EX_FILE1|EX_BANG,
@@ -815,7 +815,7 @@ EXCMD(CMD_lgetbuffer,       "lgetbuffer",   ex_cbuffer,
        EX_RANGE|EX_WORD1|EX_TRLBAR,
        ADDR_OTHER),
 EXCMD(CMD_lgetexpr,    "lgetexpr",     ex_cexpr,
-       EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_TRLBAR,
+       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,
index 3d12374b4180e1438f962e9c41407d589392ec7f..206e90165c5dec7fc5d4ef4914e1d210b0b7af38 100644 (file)
@@ -7548,7 +7548,7 @@ ex_cexpr(exarg_T *eap)
 
     // 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);
+    tv = eval_expr(eap->arg, &eap->nextcmd);
     if (tv != NULL)
     {
        if ((tv->v_type == VAR_STRING && tv->vval.v_string != NULL)
index 4c3277c587326437056f69dbd32d62d067a8fe47..f7c73f4c38ea004fa640e8bcb24243e913108623 100644 (file)
@@ -100,7 +100,7 @@ func XlistTests(cchar)
   " 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']
+                 \ 'non-error| 3', 'Xtestfile3:3:1:Line3']
 
   " List only valid entries
   let l = split(execute('Xlist', ''), "\n")
@@ -112,7 +112,7 @@ func XlistTests(cchar)
   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)
+                  \ ' 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,7 +556,7 @@ func Xtest_browse(cchar)
   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']
+  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,13 +4650,13 @@ func Test_search_in_dirstack()
              \ "Xfile3:1:X3_L1\n" .
              \ "Entering dir c\n" .
              \ "Xfile4:2:X4_L2\n" .
-             \ "Leaving dir c\n" .
-             \ "Leaving dir Xtestdir\n"
+             \ "Leaving dir c\n"
   set efm=%DEntering\ dir\ %f,%XLeaving\ dir\ %f,%f:%l:%m
-  cexpr lines
+  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('.'))
index 8d4f94508434992169b221f8e56691be2361bbf2..b25cda4104666b50f87115bee890076198c85bb3 100644 (file)
@@ -742,6 +742,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2401,
 /**/
     2400,
 /**/