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);