patch 8.2.0477: Vim9: error messages not tested

Problem:    Vim9: error messages not tested.
Solution:   Add more tests.
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index 93626d5..6a03027 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -728,6 +728,13 @@
   let val = 1
   assert_equal(g:dict_one, {key: val})
 
+  call CheckDefFailure("let x = #{8: 8}", 'E1014:')
+  call CheckDefFailure("let x = #{xxx}", 'E720:')
+  call CheckDefFailure("let x = #{xxx: 1", 'E722:')
+  call CheckDefFailure("let x = #{xxx: 1,", 'E723:')
+  call CheckDefFailure("let x = {'a': xxx}", 'E1001:')
+  call CheckDefFailure("let x = {xxx: 8}", 'E1001:')
+  call CheckDefFailure("let x = #{a: 1, a: 2}", 'E721:')
   call CheckDefExecFailure("let x = g:anint.member", 'E715:')
   call CheckDefExecFailure("let x = g:dict_empty.member", 'E716:')
 enddef
@@ -750,6 +757,8 @@
   " environment variable
   assert_equal('testvar', $TESTVAR)
   assert_equal('', $ASDF_ASD_XXX)
+
+  call CheckDefFailure("let x = $$$", 'E1002:')
 enddef
 
 def Test_expr7_register()
@@ -802,6 +811,9 @@
 
   call CheckDefFailure("let x = -'xx'", "E1030:")
   call CheckDefFailure("let x = +'xx'", "E1030:")
+  call CheckDefFailure("let x = -0z12", "E974:")
+  call CheckDefExecFailure("let x = -[8]", "E39:")
+  call CheckDefExecFailure("let x = -{'a': 1}", "E39:")
 
   call CheckDefFailure("let x = @", "E1002:")
   call CheckDefFailure("let x = @<", "E354:")
diff --git a/src/version.c b/src/version.c
index 73de61c..13a1c30 100644
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    477,
+/**/
     476,
 /**/
     475,
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 5f6f79a..4846c55 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -1612,7 +1612,21 @@
 
 	    case ISN_NEGATENR:
 		tv = STACK_TV_BOT(-1);
-		tv->vval.v_number = -tv->vval.v_number;
+		if (tv->v_type != VAR_NUMBER
+#ifdef FEAT_FLOAT
+			&& tv->v_type != VAR_FLOAT
+#endif
+			)
+		{
+		    emsg(_(e_number_exp));
+		    goto failed;
+		}
+#ifdef FEAT_FLOAT
+		if (tv->v_type == VAR_FLOAT)
+		    tv->vval.v_float = -tv->vval.v_float;
+		else
+#endif
+		    tv->vval.v_number = -tv->vval.v_number;
 		break;
 
 	    case ISN_CHECKNR: