Patch 8.2.1129
Problem:    Vim9: bar not recognized after not compiled command.
Solution:   Check for bar for commands where this is possible. (closes #6391)
Files:      src/vim9compile.c, src/testdir/test_vim9_cmd.vim


*** ../vim-8.2.1128/src/vim9compile.c   2020-07-04 13:15:26.506990170 +0200
--- src/vim9compile.c   2020-07-05 14:55:34.232523384 +0200
***************
*** 6562,6573 ****
  {
      char_u  *p;
      int           has_expr = FALSE;
  
      if (cctx->ctx_skip == SKIP_YES)
        goto theend;
  
      if (eap->cmdidx >= 0 && eap->cmdidx < CMD_SIZE)
!       has_expr = (excmd_get_argt(eap->cmdidx) & (EX_XFILE | EX_EXPAND));
      if (eap->cmdidx == CMD_syntax && STRNCMP(eap->arg, "include ", 8) == 0)
      {
        // expand filename in "syntax include [@group] filename"
--- 6562,6594 ----
  {
      char_u  *p;
      int           has_expr = FALSE;
+     char_u  *nextcmd = (char_u *)"";
  
      if (cctx->ctx_skip == SKIP_YES)
        goto theend;
  
      if (eap->cmdidx >= 0 && eap->cmdidx < CMD_SIZE)
!     {
!       long    argt = excmd_get_argt(eap->cmdidx);
!       int     usefilter = FALSE;
! 
!       has_expr = argt & (EX_XFILE | EX_EXPAND);
! 
!       // If the command can be followed by a bar, find the bar and truncate
!       // it, so that the following command can be compiled.
!       // The '|' is overwritten with a NUL, it is put back below.
!       if ((eap->cmdidx == CMD_write || eap->cmdidx == CMD_read)
!                                                          && *eap->arg == '!')
!           // :w !filter or :r !filter or :r! filter
!           usefilter = TRUE;
!       if ((argt & EX_TRLBAR) && !usefilter)
!       {
!           separate_nextcmd(eap);
!           if (eap->nextcmd != NULL)
!               nextcmd = eap->nextcmd;
!       }
!     }
! 
      if (eap->cmdidx == CMD_syntax && STRNCMP(eap->arg, "include ", 8) == 0)
      {
        // expand filename in "syntax include [@group] filename"
***************
*** 6626,6632 ****
        generate_EXEC(cctx, line);
  
  theend:
!     return (char_u *)"";
  }
  
  /*
--- 6647,6660 ----
        generate_EXEC(cctx, line);
  
  theend:
!     if (*nextcmd != NUL)
!     {
!       // the parser expects a pointer to the bar, put it back
!       --nextcmd;
!       *nextcmd = '|';
!     }
! 
!     return nextcmd;
  }
  
  /*
*** ../vim-8.2.1128/src/testdir/test_vim9_cmd.vim       2020-07-02 
21:11:29.084843956 +0200
--- src/testdir/test_vim9_cmd.vim       2020-07-05 14:50:35.225674926 +0200
***************
*** 2,7 ****
--- 2,8 ----
  
  source check.vim
  source vim9.vim
+ source view_util.vim
  
  def Test_edit_wildcards()
    let filename = 'Xtest'
***************
*** 207,211 ****
--- 208,245 ----
    CheckScriptSuccess(lines)
  enddef
  
+ def Test_bar_after_command()
+   def RedrawAndEcho()
+     let x = 'did redraw'
+     redraw | echo x
+   enddef
+   RedrawAndEcho()
+   assert_match('did redraw', Screenline(&lines))
+ 
+   if has('unix')
+     # bar in filter write command does not start new command
+     def WriteToShell()
+       new
+       setline(1, 'some text')
+       w !cat | cat > Xoutfile
+       bwipe!
+     enddef
+     WriteToShell()
+     assert_equal(['some text'], readfile('Xoutfile'))
+     delete('Xoutfile')
+ 
+     # bar in filter read command does not start new command
+     def ReadFromShell()
+       new
+       r! echo hello there | cat > Xoutfile
+       r !echo again | cat >> Xoutfile
+       bwipe!
+     enddef
+     ReadFromShell()
+     assert_equal(['hello there', 'again'], readfile('Xoutfile'))
+     delete('Xoutfile')
+   endif
+ enddef
+ 
  
  " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
*** ../vim-8.2.1128/src/version.c       2020-07-05 14:10:09.749447432 +0200
--- src/version.c       2020-07-05 14:20:29.019891556 +0200
***************
*** 756,757 ****
--- 756,759 ----
  {   /* Add new patch number below this line */
+ /**/
+     1129,
  /**/

-- 
It is too bad that the speed of light hasn't kept pace with the
changes in CPU speed and network bandwidth. -- <[email protected]>

 /// Bram Moolenaar -- [email protected] -- 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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202007051259.065Cx2aY566155%40masaka.moolenaar.net.

Raspunde prin e-mail lui