Mercurial > vim
changeset 21901:1ebcce655dd3 v8.2.1500
patch 8.2.1500: Vim9: error when using address without a command
Commit: https://github.com/vim/vim/commit/5d72ce69c8783fd8f1a0355c00806c5084010eec
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Aug 20 23:04:06 2020 +0200
patch 8.2.1500: Vim9: error when using address without a command
Problem: Vim9: error when using address without a command.
Solution: Execute the range itself. (closes https://github.com/vim/vim/issues/6747)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 20 Aug 2020 23:15:03 +0200 |
parents | bcb274fbcd61 |
children | ef5cd8d9a8b3 |
files | src/testdir/test_vim9_script.vim src/version.c src/vim9compile.c |
diffstat | 3 files changed, 25 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -10,6 +10,13 @@ def Test_syntax() let other: list<string> = ['asdf'] enddef +def Test_range_only() + new + setline(1, ['blah', 'Blah']) + :/Blah/ + assert_equal(2, getcurpos()[1]) +enddef + let s:appendToMe = 'xxx' let s:addToMe = 111 let g:existing = 'yes'
--- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1500, +/**/ 1499, /**/ 1498,
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -6661,10 +6661,22 @@ compile_def_function(ufunc_T *ufunc, int if (*cmd != '\'' || starts_with_colon) { ea.cmd = skip_range(ea.cmd, NULL); - if (ea.cmd > cmd && !starts_with_colon) + if (ea.cmd > cmd) { - emsg(_(e_colon_required_before_a_range)); - goto erret; + if (!starts_with_colon) + { + emsg(_(e_colon_required_before_a_range)); + goto erret; + } + if (ends_excmd2(line, ea.cmd)) + { + // A range without a command: jump to the line. + // TODO: compile to a more efficient command, possibly + // calling parse_cmd_address(). + ea.cmdidx = CMD_SIZE; + line = compile_exec(line, &ea, &cctx); + goto nextline; + } } } p = find_ex_command(&ea, NULL, starts_with_colon ? NULL @@ -6845,6 +6857,7 @@ compile_def_function(ufunc_T *ufunc, int line = compile_exec(line, &ea, &cctx); break; } +nextline: if (line == NULL) goto erret; line = skipwhite(line);