]> granicus.if.org Git - vim/commitdiff
patch 8.2.4410: Vim9: some code not covered by tests v8.2.4410
authorBram Moolenaar <Bram@vim.org>
Thu, 17 Feb 2022 19:44:07 +0000 (19:44 +0000)
committerBram Moolenaar <Bram@vim.org>
Thu, 17 Feb 2022 19:44:07 +0000 (19:44 +0000)
Problem:    Vim9: some code not covered by tests.
Solution:   Add a few more tests. Remove dead code.

src/testdir/test_vim9_assign.vim
src/testdir/test_vim9_cmd.vim
src/testdir/test_vim9_expr.vim
src/testdir/test_vim9_script.vim
src/version.c
src/vim9execute.c

index 1d62ac15cb144699262485f7d87a44a87b8b2c8f..82521c8888fd1b622ce772e274bf770ede2c33c7 100644 (file)
@@ -2104,6 +2104,13 @@ def Test_unlet()
   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',
index e4bea0754695de7644a5a8d95229b82045e32923..8a51eac9ae0971c6e2c907cc279795805f379f70 100644 (file)
@@ -1551,6 +1551,28 @@ def Test_lockvar()
   END
   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
index 8399b69fa87ab580432e11b596ed5ec0dde91fec..c4e520bed8f88e8d0f4853e5af88b3c45b26b8ad 100644 (file)
@@ -1556,6 +1556,14 @@ def Test_expr6()
   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
index 9993c5edb39c74f34b678c41d85d7e947e148754..3c3434d14228c4705969392d35933ad55d729f79 100644 (file)
@@ -52,6 +52,15 @@ def Test_range_only()
 
   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 @@ def Test_execute_cmd()
   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()
index 89a9fbb570d0cc3f5787815fbb58f8062105a4fd..d8b00f1d33f92bd3dd8636f97f439dcbe81550ce 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4410,
 /**/
     4409,
 /**/
index 317d1c31782094366a616ce700897804d26447ae..d2c7d5daa8c0d11d61d812eb96faf07e2af7f049 100644 (file)
@@ -2331,19 +2331,6 @@ load_namespace_var(ectx_T *ectx, isntype_T isn_type, isn_T *iptr)
     }
     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 @@ exec_instructions(ectx_T *ectx)
                    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 @@ exec_instructions(ectx_T *ectx)
                    {
                        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 @@ exec_instructions(ectx_T *ectx)
 
            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;