Patch 8.2.1137
Problem:    Vim9: modifiers not cleared after compiling function.
Solution:   Clear command modifiers. (closes #6396)
Files:      src/vim9compile.c, src/ex_docmd.c, src/proto/ex_docmd.pro,
            src/testdir/test_vim9_func.vim,
            src/testdir/dumps/Test_vim9_silent_echo.dump


*** ../vim-8.2.1136/src/vim9compile.c   2020-07-05 15:52:14.859511232 +0200
--- src/vim9compile.c   2020-07-05 18:16:32.475422040 +0200
***************
*** 6809,6814 ****
--- 6809,6815 ----
        exarg_T ea;
        int     starts_with_colon = FALSE;
        char_u  *cmd;
+       int     save_msg_scroll = msg_scroll;
  
        // Bail out on the first error to avoid a flood of errors and report
        // the right line number when inside try/catch.
***************
*** 6897,6902 ****
--- 6898,6905 ----
            line = (char_u *)"";
            continue;
        }
+       // TODO: use modifiers in the command
+       undo_cmdmod(&ea, save_msg_scroll);
  
        // Skip ":call" to get to the function name.
        if (checkforcmd(&ea.cmd, "call", 3))
*** ../vim-8.2.1136/src/ex_docmd.c      2020-07-02 21:11:29.084843956 +0200
--- src/ex_docmd.c      2020-07-05 18:15:07.723792134 +0200
***************
*** 25,31 ****
  static char_u *do_one_cmd(char_u **, int, char_u *(*fgetline)(int, void *, 
int, int), void *cookie);
  static int    if_level = 0;           // depth in :if
  #endif
- static void   free_cmdmod(void);
  static void   append_command(char_u *cmd);
  
  #ifndef FEAT_MENU
--- 25,30 ----
***************
*** 2611,2642 ****
                        ? cmdnames[(int)ea.cmdidx].cmd_name : (char_u *)NULL);
  #endif
  
!     if (ea.verbose_save >= 0)
!       p_verbose = ea.verbose_save;
! 
!     free_cmdmod();
      cmdmod = save_cmdmod;
      reg_executing = save_reg_executing;
  
-     if (ea.save_msg_silent != -1)
-     {
-       // messages could be enabled for a serious error, need to check if the
-       // counters don't become negative
-       if (!did_emsg || msg_silent > ea.save_msg_silent)
-           msg_silent = ea.save_msg_silent;
-       emsg_silent -= ea.did_esilent;
-       if (emsg_silent < 0)
-           emsg_silent = 0;
-       // Restore msg_scroll, it's set by file I/O commands, even when no
-       // message is actually displayed.
-       msg_scroll = save_msg_scroll;
- 
-       // "silent reg" or "silent echo x" inside "redir" leaves msg_col
-       // somewhere in the line.  Put it back in the first column.
-       if (redirecting())
-           msg_col = 0;
-     }
- 
  #ifdef HAVE_SANDBOX
      if (ea.did_sandbox)
        --sandbox;
--- 2610,2619 ----
                        ? cmdnames[(int)ea.cmdidx].cmd_name : (char_u *)NULL);
  #endif
  
!     undo_cmdmod(&ea, save_msg_scroll);
      cmdmod = save_cmdmod;
      reg_executing = save_reg_executing;
  
  #ifdef HAVE_SANDBOX
      if (ea.did_sandbox)
        --sandbox;
***************
*** 2927,2937 ****
  }
  
  /*
!  * Free contents of "cmdmod".
   */
!     static void
! free_cmdmod(void)
  {
      if (cmdmod.save_ei != NULL)
      {
        // Restore 'eventignore' to the value before ":noautocmd".
--- 2904,2917 ----
  }
  
  /*
!  * Unod and free contents of "cmdmod".
   */
!     void
! undo_cmdmod(exarg_T *eap, int save_msg_scroll)
  {
+     if (eap->verbose_save >= 0)
+       p_verbose = eap->verbose_save;
+ 
      if (cmdmod.save_ei != NULL)
      {
        // Restore 'eventignore' to the value before ":noautocmd".
***************
*** 2942,2947 ****
--- 2922,2946 ----
  
      if (cmdmod.filter_regmatch.regprog != NULL)
        vim_regfree(cmdmod.filter_regmatch.regprog);
+ 
+     if (eap->save_msg_silent != -1)
+     {
+       // messages could be enabled for a serious error, need to check if the
+       // counters don't become negative
+       if (!did_emsg || msg_silent > eap->save_msg_silent)
+           msg_silent = eap->save_msg_silent;
+       emsg_silent -= eap->did_esilent;
+       if (emsg_silent < 0)
+           emsg_silent = 0;
+       // Restore msg_scroll, it's set by file I/O commands, even when no
+       // message is actually displayed.
+       msg_scroll = save_msg_scroll;
+ 
+       // "silent reg" or "silent echo x" inside "redir" leaves msg_col
+       // somewhere in the line.  Put it back in the first column.
+       if (redirecting())
+           msg_col = 0;
+     }
  }
  
  /*
*** ../vim-8.2.1136/src/proto/ex_docmd.pro      2020-06-28 15:51:12.145674365 
+0200
--- src/proto/ex_docmd.pro      2020-07-05 18:15:10.935778054 +0200
***************
*** 6,11 ****
--- 6,12 ----
  void *getline_cookie(char_u *(*fgetline)(int, void *, int, int), void 
*cookie);
  char_u *getline_peek(char_u *(*fgetline)(int, void *, int, int), void 
*cookie);
  int parse_command_modifiers(exarg_T *eap, char **errormsg, int skip_only);
+ void undo_cmdmod(exarg_T *eap, int save_msg_scroll);
  int parse_cmd_address(exarg_T *eap, char **errormsg, int silent);
  int checkforcmd(char_u **pp, char *cmd, int len);
  char_u *find_ex_command(exarg_T *eap, int *full, void *(*lookup)(char_u *, 
size_t, cctx_T *), cctx_T *cctx);
*** ../vim-8.2.1136/src/testdir/test_vim9_func.vim      2020-07-05 
17:04:10.439768864 +0200
--- src/testdir/test_vim9_func.vim      2020-07-05 18:06:11.658232031 +0200
***************
*** 3,8 ****
--- 3,9 ----
  source check.vim
  source view_util.vim
  source vim9.vim
+ source screendump.vim
  
  func Test_def_basic()
    def SomeFunc(): string
***************
*** 903,907 ****
--- 904,930 ----
    assert_equal('full', Line_continuation_in_def('.'))
  enddef
  
+ def Test_silent_echo()
+   CheckScreendump
+ 
+   let lines =<< trim END
+     vim9script
+     def EchoNothing()
+       silent echo ''
+     enddef
+     defcompile
+   END
+   writefile(lines, 'XTest_silent_echo')
+ 
+   " Check that the balloon shows up after a mouse move
+   let buf = RunVimInTerminal('-S XTest_silent_echo', {'rows': 6})
+   term_sendkeys(buf, ":abc")
+   call VerifyScreenDump(buf, 'Test_vim9_silent_echo', {})
+ 
+   " clean up
+   call StopVimInTerminal(buf)
+   call delete('XTest_silent_echo')
+ enddef
+ 
  
  " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
*** ../vim-8.2.1136/src/testdir/dumps/Test_vim9_silent_echo.dump        
2020-07-05 18:17:55.359062623 +0200
--- src/testdir/dumps/Test_vim9_silent_echo.dump        2020-07-05 
18:04:19.350778090 +0200
***************
*** 0 ****
--- 1,6 ----
+ | +0&#ffffff0@74
+ |~+0#4040ff13&| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |:+0#0000000&|a|b|c> @70
*** ../vim-8.2.1136/src/version.c       2020-07-05 17:04:10.439768864 +0200
--- src/version.c       2020-07-05 18:17:42.815116873 +0200
***************
*** 756,757 ****
--- 756,759 ----
  {   /* Add new patch number below this line */
+ /**/
+     1137,
  /**/

-- 
Back off man, I'm a scientist.
              -- Peter, Ghostbusters

 /// 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/202007051620.065GK38N608099%40masaka.moolenaar.net.

Raspunde prin e-mail lui