diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-08-20 23:04:06 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-08-20 23:04:06 +0200 |
commit | 5d72ce69c8783fd8f1a0355c00806c5084010eec (patch) | |
tree | 557400c15d37c232cf6c4c8ff9be56775208df96 | |
parent | ec65d77fa26cc87f7ce54a5a941a799e3a667c50 (diff) | |
download | vim-git-5d72ce69c8783fd8f1a0355c00806c5084010eec.tar.gz |
patch 8.2.1500: Vim9: error when using address without a commandv8.2.1500
Problem: Vim9: error when using address without a command.
Solution: Execute the range itself. (closes #6747)
-rw-r--r-- | src/testdir/test_vim9_script.vim | 7 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9compile.c | 19 |
3 files changed, 25 insertions, 3 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index d442dc254..e8f07069c 100644 --- 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' diff --git a/src/version.c b/src/version.c index d1c75a385..bd836e070 100644 --- 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, diff --git a/src/vim9compile.c b/src/vim9compile.c index 025e8cbc6..f1936452a 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -6661,10 +6661,22 @@ compile_def_function(ufunc_T *ufunc, int set_return_type, cctx_T *outer_cctx) 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 set_return_type, cctx_T *outer_cctx) line = compile_exec(line, &ea, &cctx); break; } +nextline: if (line == NULL) goto erret; line = skipwhite(line); |