diff src/vim9compile.c @ 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 f19ac9b8b011
children 1fc2ffadf412
line wrap: on
line diff
--- 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);