To: vim_dev@googlegroups.com Subject: Patch 8.2.1137 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ 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 -- 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 ///