]> granicus.if.org Git - vim/commitdiff
patch 8.2.4409: Vim9: some code not covered by tests v8.2.4409
authorBram Moolenaar <Bram@vim.org>
Thu, 17 Feb 2022 16:30:11 +0000 (16:30 +0000)
committerBram Moolenaar <Bram@vim.org>
Thu, 17 Feb 2022 16:30:11 +0000 (16:30 +0000)
Problem:    Vim9: some code not covered by tests.
Solution:   Add a few more tests.  Fix reported line number.

src/testdir/test_vim9_assign.vim
src/version.c
src/vim9execute.c

index c5f56c2ef136fca74a2feefd885bb5b9165c9b1b..1d62ac15cb144699262485f7d87a44a87b8b2c8f 100644 (file)
@@ -847,6 +847,9 @@ def Test_assignment_list()
   assert_equal(['sdf', 'asdf', 'end'], list3)
 
   v9.CheckDefExecFailure(['var ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:')
+  v9.CheckDefExecFailure(['var ll = [1, 2, 3]', 'unlet ll[8 : 9]'], 'E684:')
+  v9.CheckDefExecFailure(['var ll = [1, 2, 3]', 'unlet ll[1 : -9]'], 'E684:')
+  v9.CheckDefExecFailure(['var ll = [1, 2, 3]', 'unlet ll[2 : 1]'], 'E684:')
 
   # type becomes list<any>
   var somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c']
@@ -2193,6 +2196,10 @@ def Test_unlet()
     'g:dd = {"a": 1, 2: 2}'
     'unlet g:dd[0z11]',
     ], 'E1029:', 2)
+  v9.CheckDefExecFailure([
+    'g:str = "a string"'
+    'unlet g:str[0]',
+    ], 'E1148: Cannot index a string', 2)
 
   # can compile unlet before variable exists
   g:someDict = {key: 'val'}
index edac69059d794198ecdabf9dc615b046d6de32f9..89a9fbb570d0cc3f5787815fbb58f8062105a4fd 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4409,
 /**/
     4408,
 /**/
index 1c5dd74da0643d5f36a21e3e9536f483fe1b6f21..317d1c31782094366a616ce700897804d26447ae 100644 (file)
@@ -1998,12 +1998,12 @@ execute_unletindex(isn_T *iptr, ectx_T *ectx)
     // Stack contains:
     // -2 index
     // -1 dict or list
+    SOURCING_LNUM = iptr->isn_lnum;
     if (tv_dest->v_type == VAR_DICT)
     {
        // unlet a dict item, index must be a string
        if (tv_idx->v_type != VAR_STRING && tv_idx->v_type != VAR_NUMBER)
        {
-           SOURCING_LNUM = iptr->isn_lnum;
            semsg(_(e_expected_str_but_got_str),
                        vartype_name(VAR_STRING),
                        vartype_name(tv_idx->v_type));
@@ -2020,7 +2020,6 @@ execute_unletindex(isn_T *iptr, ectx_T *ectx)
                status = FAIL;
            else
            {
-               SOURCING_LNUM = iptr->isn_lnum;
                if (tv_idx->v_type == VAR_STRING)
                {
                    key = tv_idx->vval.v_string;
@@ -2053,7 +2052,6 @@ execute_unletindex(isn_T *iptr, ectx_T *ectx)
     else if (tv_dest->v_type == VAR_LIST)
     {
        // unlet a List item, index must be a number
-       SOURCING_LNUM = iptr->isn_lnum;
        if (check_for_number(tv_idx) == FAIL)
        {
            status = FAIL;
@@ -2072,7 +2070,6 @@ execute_unletindex(isn_T *iptr, ectx_T *ectx)
 
                if (li == NULL)
                {
-                   SOURCING_LNUM = iptr->isn_lnum;
                    semsg(_(e_list_index_out_of_range_nr), n);
                    status = FAIL;
                }
@@ -2133,7 +2130,11 @@ execute_unletrange(isn_T *iptr, ectx_T *ectx)
 
            li = list_find_index(l, &n1);
            if (li == NULL)
+           {
+               semsg(_(e_list_index_out_of_range_nr),
+                                                (long)tv_idx1->vval.v_number);
                status = FAIL;
+           }
            else
            {
                if (n1 < 0)
@@ -2143,7 +2144,10 @@ execute_unletrange(isn_T *iptr, ectx_T *ectx)
                    listitem_T *li2 = list_find(l, n2);
 
                    if (li2 == NULL)
+                   {
+                       semsg(_(e_list_index_out_of_range_nr), n2);
                        status = FAIL;
+                   }
                    else
                        n2 = list_idx_of_item(l, li2);
                }