patch 8.2.0612: Vim9: no check for space before #comment

Problem:    Vim9: no check for space before #comment.
Solution:   Add space checks.
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index bd11463..f38bdac 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -451,12 +451,9 @@
 	}
 	else if (!ASCII_ISALPHA(*p) && regmatch.regprog == NULL)
 	{
-	    s = skip_regexp(p + 1, *p, TRUE);
-	    if (*s != *p)
-	    {
-		emsg(_(e_invalpat));
+	    s = skip_regexp_err(p + 1, *p, TRUE);
+	    if (s == NULL)
 		goto sortend;
-	    }
 	    *s = NUL;
 	    // Use last search pattern if sort pattern is empty.
 	    if (s == p + 1)
diff --git a/src/ex_eval.c b/src/ex_eval.c
index 7ffc145..4aa2658 100644
--- a/src/ex_eval.c
+++ b/src/ex_eval.c
@@ -1021,12 +1021,12 @@
     if (eap->cmdidx == CMD_elseif)
     {
 	result = eval_to_bool(eap->arg, &error, &eap->nextcmd, skip);
+
 	// When throwing error exceptions, we want to throw always the first
 	// of several errors in a row.  This is what actually happens when
 	// a conditional error was detected above and there is another failure
 	// when parsing the expression.  Since the skip flag is set in this
 	// case, the parsing error will be ignored by emsg().
-
 	if (!skip && !error)
 	{
 	    if (result)
@@ -1518,7 +1518,7 @@
 						       &cstack->cs_looplevel);
     }
 
-    if (ends_excmd(*eap->arg))	// no argument, catch all errors
+    if (ends_excmd2(eap->cmd, eap->arg))   // no argument, catch all errors
     {
 	pat = (char_u *)".*";
 	end = NULL;
@@ -1527,7 +1527,9 @@
     else
     {
 	pat = eap->arg + 1;
-	end = skip_regexp(pat, *eap->arg, TRUE);
+	end = skip_regexp_err(pat, *eap->arg, TRUE);
+	if (end == NULL)
+	    give_up = TRUE;
     }
 
     if (!give_up)
@@ -1548,7 +1550,8 @@
 	if (!skip && (cstack->cs_flags[idx] & CSF_THROWN)
 		&& !(cstack->cs_flags[idx] & CSF_CAUGHT))
 	{
-	    if (end != NULL && *end != NUL && !ends_excmd(*skipwhite(end + 1)))
+	    if (end != NULL && *end != NUL
+				      && !ends_excmd2(end, skipwhite(end + 1)))
 	    {
 		emsg(_(e_trailing));
 		return;
diff --git a/src/gui.c b/src/gui.c
index cdfc929..5959043 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -5036,7 +5036,7 @@
 	// of the argument ending up after the shell prompt.
 	msg_clr_eos_force();
 #ifdef GUI_MAY_SPAWN
-	if (!ends_excmd(*eap->arg))
+	if (!ends_excmd2(eap->cmd, eap->arg))
 	    gui_start(eap->arg);
 	else
 #endif
@@ -5045,7 +5045,7 @@
 	channel_gui_register_all();
 #endif
     }
-    if (!ends_excmd(*eap->arg))
+    if (!ends_excmd2(eap->cmd, eap->arg))
 	ex_next(eap);
 }
 
diff --git a/src/highlight.c b/src/highlight.c
index ee2e437..9476a7d 100644
--- a/src/highlight.c
+++ b/src/highlight.c
@@ -658,7 +658,7 @@
     /*
      * If no argument, list current highlighting.
      */
-    if (ends_excmd(*line))
+    if (!init && ends_excmd2(line - 1, line))
     {
 	for (i = 1; i <= highlight_ga.ga_len && !got_int; ++i)
 	    // TODO: only call when the group has attributes set
diff --git a/src/proto/regexp.pro b/src/proto/regexp.pro
index 27ba8e5..d3a7754 100644
--- a/src/proto/regexp.pro
+++ b/src/proto/regexp.pro
@@ -1,6 +1,7 @@
 /* regexp.c */
 int re_multiline(regprog_T *prog);
-char_u *skip_regexp(char_u *startp, int dirc, int magic);
+char_u *skip_regexp(char_u *startp, int delim, int magic);
+char_u *skip_regexp_err(char_u *startp, int delim, int magic);
 char_u *skip_regexp_ex(char_u *startp, int dirc, int magic, char_u **newp, int *dropped);
 reg_extmatch_T *ref_extmatch(reg_extmatch_T *em);
 void unref_extmatch(reg_extmatch_T *em);
diff --git a/src/regexp.c b/src/regexp.c
index 3911c90..c222d9c 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -534,17 +534,37 @@
 
 /*
  * Skip past regular expression.
- * Stop at end of "startp" or where "dirc" is found ('/', '?', etc).
+ * Stop at end of "startp" or where "delim" is found ('/', '?', etc).
  * Take care of characters with a backslash in front of it.
  * Skip strings inside [ and ].
  */
     char_u *
 skip_regexp(
     char_u	*startp,
-    int		dirc,
+    int		delim,
     int		magic)
 {
-    return skip_regexp_ex(startp, dirc, magic, NULL, NULL);
+    return skip_regexp_ex(startp, delim, magic, NULL, NULL);
+}
+
+/*
+ * Call skip_regexp() and when the delimiter does not match give an error and
+ * return NULL.
+ */
+    char_u *
+skip_regexp_err(
+    char_u	*startp,
+    int		delim,
+    int		magic)
+{
+    char_u *p = skip_regexp(startp, delim, magic);
+
+    if (*p != delim)
+    {
+	semsg(_("E654: missing delimiter after search pattern: %s"), startp);
+	return NULL;
+    }
+    return p;
 }
 
 /*
diff --git a/src/testdir/test_sort.vim b/src/testdir/test_sort.vim
index 92e8f49..aa74a92 100644
--- a/src/testdir/test_sort.vim
+++ b/src/testdir/test_sort.vim
@@ -1255,7 +1255,7 @@
   call setline(1, ['line1', 'line2'])
   call assert_fails('sort no', 'E474:')
   call assert_fails('sort c', 'E475:')
-  call assert_fails('sort #pat%', 'E682:')
+  call assert_fails('sort #pat%', 'E654:')
 
   enew!
 endfunc
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 70653f0..a541d88 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -1153,22 +1153,76 @@
 
   CheckDefFailure([
       'try# comment',
-      'echo "yes"',
+      '  echo "yes"',
       'catch',
       'endtry',
       ], 'E488:')
+  CheckScriptFailure([
+      'vim9script',
+      'try# comment',
+      'echo "yes"',
+      ], 'E488:')
   CheckDefFailure([
       'try',
-      'echo "yes"',
+      '  echo "yes"',
       'catch# comment',
       'endtry',
       ], 'E488:')
+  CheckScriptFailure([
+      'vim9script',
+      'try',
+      '  echo "yes"',
+      'catch# comment',
+      'endtry',
+      ], 'E654:')
+  CheckDefFailure([
+      'try',
+      '  echo "yes"',
+      'catch /pat/# comment',
+      'endtry',
+      ], 'E488:')
+  CheckScriptFailure([
+      'vim9script',
+      'try',
+      '  throw "pat"',
+      'catch /pat/# comment',
+      'endtry',
+      ], 'E605:')
   CheckDefFailure([
       'try',
       'echo "yes"',
       'catch',
       'endtry# comment',
       ], 'E488:')
+  CheckScriptFailure([
+      'vim9script',
+      'try',
+      '  echo "yes"',
+      'catch',
+      'endtry# comment',
+      ], 'E600:')
+
+  CheckScriptSuccess([
+      'vim9script',
+      'hi # comment',
+      ])
+  CheckScriptFailure([
+      'vim9script',
+      'hi# comment',
+      ], 'E416:')
+enddef
+
+def Test_vim9_comment_gui()
+  CheckCanRunGui
+
+  CheckScriptFailure([
+      'vim9script',
+      'gui#comment'
+      ], 'E499:')
+  CheckScriptFailure([
+      'vim9script',
+      'gui -f#comment'
+      ], 'E499:')
 enddef
 
 def Test_vim9_comment_not_compiled()
diff --git a/src/version.c b/src/version.c
index d051d79..de9413b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    612,
+/**/
     611,
 /**/
     610,