0
0
mirror of https://github.com/vim/vim.git synced 2025-09-27 04:14:06 -04:00

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)
This commit is contained in:
Bram Moolenaar
2020-08-20 23:04:06 +02:00
parent ec65d77fa2
commit 5d72ce69c8
3 changed files with 25 additions and 3 deletions

View File

@@ -10,6 +10,13 @@ def Test_syntax()
let other: list<string> = ['asdf'] let other: list<string> = ['asdf']
enddef enddef
def Test_range_only()
new
setline(1, ['blah', 'Blah'])
:/Blah/
assert_equal(2, getcurpos()[1])
enddef
let s:appendToMe = 'xxx' let s:appendToMe = 'xxx'
let s:addToMe = 111 let s:addToMe = 111
let g:existing = 'yes' let g:existing = 'yes'

View File

@@ -754,6 +754,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1500,
/**/ /**/
1499, 1499,
/**/ /**/

View File

@@ -6661,11 +6661,23 @@ compile_def_function(ufunc_T *ufunc, int set_return_type, cctx_T *outer_cctx)
if (*cmd != '\'' || starts_with_colon) if (*cmd != '\'' || starts_with_colon)
{ {
ea.cmd = skip_range(ea.cmd, NULL); ea.cmd = skip_range(ea.cmd, NULL);
if (ea.cmd > cmd && !starts_with_colon) if (ea.cmd > cmd)
{
if (!starts_with_colon)
{ {
emsg(_(e_colon_required_before_a_range)); emsg(_(e_colon_required_before_a_range));
goto erret; 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 p = find_ex_command(&ea, NULL, starts_with_colon ? NULL
: (void *(*)(char_u *, size_t, cctx_T *))lookup_local, : (void *(*)(char_u *, size_t, cctx_T *))lookup_local,
@@ -6845,6 +6857,7 @@ compile_def_function(ufunc_T *ufunc, int set_return_type, cctx_T *outer_cctx)
line = compile_exec(line, &ea, &cctx); line = compile_exec(line, &ea, &cctx);
break; break;
} }
nextline:
if (line == NULL) if (line == NULL)
goto erret; goto erret;
line = skipwhite(line); line = skipwhite(line);