summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-08-20 23:04:06 +0200
committerBram Moolenaar <Bram@vim.org>2020-08-20 23:04:06 +0200
commit5d72ce69c8783fd8f1a0355c00806c5084010eec (patch)
tree557400c15d37c232cf6c4c8ff9be56775208df96
parentec65d77fa26cc87f7ce54a5a941a799e3a667c50 (diff)
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.vim7
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c19
3 files changed, 25 insertions, 3 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index d442dc2548..e8f07069c2 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 d1c75a385f..bd836e0700 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 025e8cbc6e..f1936452a9 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);