Mercurial > vim
diff src/vim9execute.c @ 20142:fe8d0a4344df v8.2.0626
patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Commit: https://github.com/vim/vim/commit/f93c7fea084a99848d512ff2732041d4b41d93c8
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Apr 23 22:16:53 2020 +0200
patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Problem: Vim9: wrong syntax of function in Vim9 script.
Solution: Give error for missing space. Implement :echomsg and :echoerr.
(closes #5670)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 23 Apr 2020 22:30:03 +0200 |
parents | 39a18a0df429 |
children | 0612c64a2b87 |
line wrap: on
line diff
--- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -668,8 +668,12 @@ call_def_function( } break; - // execute :execute {string} ... + // :execute {string} ... + // :echomsg {string} ... + // :echoerr {string} ... case ISN_EXECUTE: + case ISN_ECHOMSG: + case ISN_ECHOERR: { int count = iptr->isn_arg.number; garray_T ga; @@ -705,7 +709,30 @@ call_def_function( ectx.ec_stack.ga_len -= count; if (!failed && ga.ga_data != NULL) - do_cmdline_cmd((char_u *)ga.ga_data); + { + if (iptr->isn_type == ISN_EXECUTE) + do_cmdline_cmd((char_u *)ga.ga_data); + else + { + msg_sb_eol(); + if (iptr->isn_type == ISN_ECHOMSG) + { + msg_attr(ga.ga_data, echo_attr); + out_flush(); + } + else + { + int save_did_emsg = did_emsg; + + SOURCING_LNUM = iptr->isn_lnum; + emsg(ga.ga_data); + if (!force_abort) + // We don't want to abort following + // commands, restore did_emsg. + did_emsg = save_did_emsg; + } + } + } ga_clear(&ga); } break; @@ -1947,6 +1974,14 @@ ex_disassemble(exarg_T *eap) smsg("%4d EXECUTE %lld", current, (long long)(iptr->isn_arg.number)); break; + case ISN_ECHOMSG: + smsg("%4d ECHOMSG %lld", current, + (long long)(iptr->isn_arg.number)); + break; + case ISN_ECHOERR: + smsg("%4d ECHOERR %lld", current, + (long long)(iptr->isn_arg.number)); + break; case ISN_LOAD: if (iptr->isn_arg.number < 0) smsg("%4d LOAD arg[%lld]", current,