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.