patch 8.2.4410: Vim9: some code not covered by tests

Problem:    Vim9: some code not covered by tests.
Solution:   Add a few more tests. Remove dead code.
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index 1d62ac1..82521c8 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -2104,6 +2104,13 @@
   unlet ll[-2 : -1]
   assert_equal([1, 2], ll)
 
+  g:nrdict = {1: 1, 2: 2}
+  g:idx = 1
+  unlet g:nrdict[g:idx]
+  assert_equal({2: 2}, g:nrdict)
+  unlet g:nrdict
+  unlet g:idx
+
   v9.CheckDefFailure([
     'var ll = [1, 2]',
     'll[1 : 2] = 7',
diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim
index e4bea07..8a51eac 100644
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -1552,6 +1552,28 @@
   v9.CheckScriptFailure(lines, 'E1119', 4)
 
   lines =<< trim END
+      vim9script
+      var theList = [1, 2, 3]
+      def AddToList()
+        lockvar theList
+        theList += [4]
+      enddef
+      AddToList()
+  END
+  v9.CheckScriptFailure(lines, 'E741', 2)
+
+  lines =<< trim END
+      vim9script
+      var theList = [1, 2, 3]
+      def AddToList()
+        lockvar theList
+        add(theList, 4)
+      enddef
+      AddToList()
+  END
+  v9.CheckScriptFailure(lines, 'E741', 2)
+
+  lines =<< trim END
       var theList = [1, 2, 3]
       lockvar theList
   END
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index 8399b69..c4e520b 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -1556,6 +1556,14 @@
   v9.CheckDefExecAndScriptFailure(['echo 1 / 0'], 'E1154', 1)
   v9.CheckDefExecAndScriptFailure(['echo 1 % 0'], 'E1154', 1)
 
+  if has('float')
+    v9.CheckDefExecAndScriptFailure([
+          'g:one = 1.0'
+          'g:two = 2.0'
+          'echo g:one % g:two'
+          ], 'E804', 3)
+  endif
+
   lines =<< trim END
     var n = 0
     eval 1 / n
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 9993c5e..3c3434d 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -52,6 +52,15 @@
 
   bwipe!
 
+  lines =<< trim END
+      set cpo+=-
+      :1,999
+  END
+  v9.CheckDefExecAndScriptFailure(lines, 'E16:', 2)
+  set cpo&vim
+
+  v9.CheckDefExecAndScriptFailure([":'x"], 'E20:', 1)
+
   # won't generate anything
   if false
     :123
@@ -1726,6 +1735,9 @@
   v9.CheckDefFailure(['execute xxx'], 'E1001:', 1)
   v9.CheckDefExecFailure(['execute "tabnext " .. 8'], 'E475:', 1)
   v9.CheckDefFailure(['execute "cmd"# comment'], 'E488:', 1)
+  if has('channel')
+    v9.CheckDefExecFailure(['execute test_null_channel()'], 'E908:', 1)
+  endif
 enddef
 
 def Test_execute_cmd_vimscript()
diff --git a/src/version.c b/src/version.c
index 89a9fbb..d8b00f1 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4410,
+/**/
     4409,
 /**/
     4408,
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 317d1c3..d2c7d5d 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -2331,19 +2331,6 @@
     }
     di = find_var_in_ht(ht, 0, iptr->isn_arg.string, TRUE);
 
-    if (di == NULL && ht == get_globvar_ht()
-			    && vim_strchr(iptr->isn_arg.string,
-					AUTOLOAD_CHAR) != NULL)
-    {
-	// Global variable has an autoload name, may still need
-	// to load the script.
-	if (script_autoload(iptr->isn_arg.string, FALSE))
-	    di = find_var_in_ht(ht, 0,
-				   iptr->isn_arg.string, TRUE);
-	if (did_emsg)
-	    return FAIL;
-    }
-
     if (di == NULL)
     {
 	SOURCING_LNUM = iptr->isn_lnum;
@@ -2520,14 +2507,14 @@
 		    ea.cmdidx = CMD_SIZE;
 		    ea.addr_type = ADDR_LINES;
 		    ea.cmd = iptr->isn_arg.string;
+		    SOURCING_LNUM = iptr->isn_lnum;
 		    parse_cmd_address(&ea, &error, FALSE);
 		    if (ea.cmd == NULL)
 			goto on_error;
-		    if (error == NULL)
-			error = ex_range_without_command(&ea);
+		    // error is always NULL when using ADDR_LINES
+		    error = ex_range_without_command(&ea);
 		    if (error != NULL)
 		    {
-			SOURCING_LNUM = iptr->isn_lnum;
 			emsg(error);
 			goto on_error;
 		    }
@@ -3566,12 +3553,6 @@
 		    {
 			ufunc = find_func(funcref->fr_func_name, FALSE);
 		    }
-		    if (ufunc == NULL)
-		    {
-			SOURCING_LNUM = iptr->isn_lnum;
-			emsg(_(e_function_reference_invalid));
-			goto theend;
-		    }
 		    if (fill_partial_and_closure(pt, ufunc, ectx) == FAIL)
 			goto theend;
 		    tv = STACK_TV_BOT(0);
@@ -4488,16 +4469,7 @@
 
 	    case ISN_NEGATENR:
 		tv = STACK_TV_BOT(-1);
-		if (tv->v_type != VAR_NUMBER
-#ifdef FEAT_FLOAT
-			&& tv->v_type != VAR_FLOAT
-#endif
-			)
-		{
-		    SOURCING_LNUM = iptr->isn_lnum;
-		    emsg(_(e_number_expected));
-		    goto on_error;
-		}
+		// CHECKTYPE should have checked the variable type
 #ifdef FEAT_FLOAT
 		if (tv->v_type == VAR_FLOAT)
 		    tv->vval.v_float = -tv->vval.v_float;