patch 8.2.2052: Vim9: "edit +4 fname" gives an error

Problem:    Vim9: "edit +4 fname" gives an error. (Naruhiko Nishino)
Solution:   Allow using a range in the +cmd argument. (closes #7364)
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 44e113d..582791a 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -595,6 +595,17 @@
 }
 
 /*
+ * Execute the "+cmd" argument of "edit +cmd fname" and the like.
+ * This allows for using a range without ":" in Vim9 script.
+ */
+    int
+do_cmd_argument(char_u *cmd)
+{
+    return do_cmdline(cmd, NULL, NULL,
+		      DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_KEYTYPED|DOCMD_RANGEOK);
+}
+
+/*
  * do_cmdline(): execute one Ex command line
  *
  * 1. Execute "cmdline" when it is not NULL.
@@ -989,7 +1000,7 @@
 	 *    "cmdline_copy" can change, e.g. for '%' and '#' expansion.
 	 */
 	++recursive;
-	next_cmdline = do_one_cmd(&cmdline_copy, flags & DOCMD_VERBOSE,
+	next_cmdline = do_one_cmd(&cmdline_copy, flags,
 #ifdef FEAT_EVAL
 				&cstack,
 #endif
@@ -1685,7 +1696,8 @@
 /*
  * Execute one Ex command.
  *
- * If 'sourcing' is TRUE, the command will be included in the error message.
+ * If "flags" has DOCMD_VERBOSE, the command will be included in the error
+ * message.
  *
  * 1. skip comment lines and leading space
  * 2. handle command modifiers
@@ -1708,7 +1720,7 @@
     static char_u *
 do_one_cmd(
     char_u	**cmdlinep,
-    int		sourcing,
+    int		flags,
 #ifdef FEAT_EVAL
     cstack_T	*cstack,
 #endif
@@ -1731,6 +1743,7 @@
     int		vim9script = in_vim9script();
     int		did_set_expr_line = FALSE;
 #endif
+    int		sourcing = flags & DOCMD_VERBOSE;
 
     CLEAR_FIELD(ea);
     ea.line1 = 1;
@@ -1794,7 +1807,7 @@
 #ifdef FEAT_EVAL
     // In Vim9 script a colon is required before the range.  This may also be
     // after command modifiers.
-    if (vim9script)
+    if (vim9script && (flags & DOCMD_RANGEOK) == 0)
     {
 	may_have_range = FALSE;
 	for (p = ea.cmd; p >= *cmdlinep; --p)
@@ -5009,7 +5022,7 @@
 	else
 	    goto_buffer(eap, DOBUF_FIRST, FORWARD, (int)eap->line2);
 	if (eap->do_ecmd_cmd != NULL)
-	    do_cmdline_cmd(eap->do_ecmd_cmd);
+	    do_cmd_argument(eap->do_ecmd_cmd);
     }
 }
 
@@ -5022,7 +5035,7 @@
 {
     goto_buffer(eap, DOBUF_MOD, FORWARD, (int)eap->line2);
     if (eap->do_ecmd_cmd != NULL)
-	do_cmdline_cmd(eap->do_ecmd_cmd);
+	do_cmd_argument(eap->do_ecmd_cmd);
 }
 
 /*
@@ -5037,7 +5050,7 @@
 
     goto_buffer(eap, DOBUF_CURRENT, FORWARD, (int)eap->line2);
     if (eap->do_ecmd_cmd != NULL)
-	do_cmdline_cmd(eap->do_ecmd_cmd);
+	do_cmd_argument(eap->do_ecmd_cmd);
 }
 
 /*
@@ -5054,7 +5067,7 @@
 
     goto_buffer(eap, DOBUF_CURRENT, BACKWARD, (int)eap->line2);
     if (eap->do_ecmd_cmd != NULL)
-	do_cmdline_cmd(eap->do_ecmd_cmd);
+	do_cmd_argument(eap->do_ecmd_cmd);
 }
 
 /*
@@ -5071,7 +5084,7 @@
 
     goto_buffer(eap, DOBUF_FIRST, FORWARD, 0);
     if (eap->do_ecmd_cmd != NULL)
-	do_cmdline_cmd(eap->do_ecmd_cmd);
+	do_cmd_argument(eap->do_ecmd_cmd);
 }
 
 /*
@@ -5086,7 +5099,7 @@
 
     goto_buffer(eap, DOBUF_LAST, BACKWARD, 0);
     if (eap->do_ecmd_cmd != NULL)
-	do_cmdline_cmd(eap->do_ecmd_cmd);
+	do_cmd_argument(eap->do_ecmd_cmd);
 }
 
 /*
@@ -6680,7 +6693,7 @@
     else
     {
 	if (eap->do_ecmd_cmd != NULL)
-	    do_cmdline_cmd(eap->do_ecmd_cmd);
+	    do_cmd_argument(eap->do_ecmd_cmd);
 #ifdef FEAT_TITLE
 	n = curwin->w_arg_idx_invalid;
 #endif