From: Bram Moolenaar Date: Thu, 20 Aug 2020 21:04:06 +0000 (+0200) Subject: patch 8.2.1500: Vim9: error when using address without a command X-Git-Tag: v8.2.1500 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5d72ce69c8783fd8f1a0355c00806c5084010eec;p=vim 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 #6747) --- 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 = ['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 @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1500, /**/ 1499, /**/ 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);