patch 8.2.0806: using "func!" after vim9script gives confusing error

Problem:    using "func!" after vim9script gives confusing error.
Solution:   Give E477. (closes #6107)
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 22166fc..cc31328 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -136,7 +136,7 @@
   let dict2: dict<number> = #{one: 1, two: 2}
   let dict3: dict<string> = #{key: 'value'}
   let dict4: dict<any> = #{one: 1, two: '2'}
-  let dict5: dict<blob> = #{one: 0z01, tw: 0z02}
+  let dict5: dict<blob> = #{one: 0z01, two: 0z02}
 
   call CheckDefExecFailure(['let dd = {}', 'dd[""] = 6'], 'E713:')
 
@@ -1721,6 +1721,11 @@
       'dsearch /pat/#comment',
       'bwipe!',
       ], 'E488:')
+
+  CheckScriptFailure([
+      'vim9script',
+      'func! SomeFunc()',
+      ], 'E477:')
 enddef
 
 def Test_finish()
diff --git a/src/version.c b/src/version.c
index c112f7d..d36fa4a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    806,
+/**/
     805,
 /**/
     804,
diff --git a/src/vim9script.c b/src/vim9script.c
index e213d61..76650f8 100644
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -84,6 +84,12 @@
 	{
 	    int		    lnum_start = SOURCING_LNUM - 1;
 
+	    if (*p == '!')
+	    {
+		emsg(_(e_nobang));
+		break;
+	    }
+
 	    // Handle :function and :def by calling def_function().
 	    // It will read upto the matching :endded or :endfunction.
 	    eap->cmdidx = *line == 'f' ? CMD_function : CMD_def;