]> granicus.if.org Git - vim/commitdiff
patch 8.2.2304: Vim9: no test for unletting an imported variable v8.2.2304
authorBram Moolenaar <Bram@vim.org>
Tue, 5 Jan 2021 19:58:25 +0000 (20:58 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 5 Jan 2021 19:58:25 +0000 (20:58 +0100)
Problem:    Vim9: no test for unletting an imported variable.
Solution:   Add a test.  Fix line number in error.

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

index f2d09fcdf188a170a4cd3f067f23ecfc666cf3f4..2a21ca065f6c9ce0cbff4090726b1d30e972c74b 100644 (file)
@@ -1349,6 +1349,11 @@ def Test_unlet()
   assert_false(exists('s:somevar'))
   unlet! s:somevar
 
+  CheckDefExecFailure([
+    'var dd = 111',
+    'unlet dd',
+    ], 'E1081:', 2)
+
   # dict unlet
   var dd = {a: 1, b: 2, c: 3}
   unlet dd['a']
@@ -1367,21 +1372,29 @@ def Test_unlet()
   assert_equal([{a: 1}, {c: 3}], dl)
 
   CheckDefExecFailure([
-   'var ll = test_null_list()',
-   'unlet ll[0]',
-   ], 'E684:')
+    'var ll = test_null_list()',
+    'unlet ll[0]',
+    ], 'E684:', 2)
+  CheckDefExecFailure([
+    'var ll = [1]',
+    'unlet ll[2]',
+    ], 'E684:', 2)
   CheckDefExecFailure([
-   'var ll = [1]',
-   'unlet ll[2]',
-   ], 'E684:')
+    'var ll = [1]',
+    'unlet ll[g:astring]',
+    ], 'E39:', 2)
   CheckDefExecFailure([
-   'var dd = test_null_dict()',
-   'unlet dd["a"]',
-   ], 'E716:')
+    'var dd = test_null_dict()',
+    'unlet dd["a"]',
+    ], 'E716:', 2)
   CheckDefExecFailure([
-   'var dd = {a: 1}',
-   'unlet dd["b"]',
-   ], 'E716:')
+    'var dd = {a: 1}',
+    'unlet dd["b"]',
+    ], 'E716:', 2)
+  CheckDefExecFailure([
+    'var dd = {a: 1}',
+    'unlet dd[g:alist]',
+    ], 'E1105:', 2)
 
   # can compile unlet before variable exists
   g:someDict = {key: 'val'}
@@ -1426,6 +1439,18 @@ def Test_unlet()
    'defcompile',
    ], 'E1081:')
 
+  writefile(['vim9script', 'export var svar = 1234'], 'XunletExport.vim')
+  var lines =<< trim END
+    vim9script
+    import svar from './XunletExport.vim'
+    def UnletSvar()
+      unlet svar
+    enddef
+    defcompile
+  END
+  CheckScriptFailure(lines, 'E1081:', 1)
+  delete('XunletExport.vim')
+
   $ENVVAR = 'foobar'
   assert_equal('foobar', $ENVVAR)
   unlet $ENVVAR
index a2553fcc4a52134c326330182cfb2b80d4b32b4d..77f032db0237800b354e473b61b265b21303d993 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2304,
 /**/
     2303,
 /**/
index d72c7faf69dc1f35e55e94a1ba8744e9bf9c9fc6..b6297d7ebaa16ad68c9e3dc9172bc6c50b3d04eb 100644 (file)
@@ -1917,6 +1917,7 @@ call_def_function(
                        // unlet a dict item, index must be a string
                        if (tv_idx->v_type != VAR_STRING)
                        {
+                           SOURCING_LNUM = iptr->isn_lnum;
                            semsg(_(e_expected_str_but_got_str),
                                        vartype_name(VAR_STRING),
                                        vartype_name(tv_idx->v_type));
@@ -1935,6 +1936,7 @@ call_def_function(
                            if (di == NULL)
                            {
                                // NULL dict is equivalent to empty dict
+                               SOURCING_LNUM = iptr->isn_lnum;
                                semsg(_(e_dictkey), key);
                                status = FAIL;
                            }
@@ -1950,6 +1952,7 @@ call_def_function(
                        // unlet a List item, index must be a number
                        if (tv_idx->v_type != VAR_NUMBER)
                        {
+                           SOURCING_LNUM = iptr->isn_lnum;
                            semsg(_(e_expected_str_but_got_str),
                                        vartype_name(VAR_NUMBER),
                                        vartype_name(tv_idx->v_type));
@@ -1964,6 +1967,7 @@ call_def_function(
                            li = list_find(l, n);
                            if (li == NULL)
                            {
+                               SOURCING_LNUM = iptr->isn_lnum;
                                semsg(_(e_listidx), n);
                                status = FAIL;
                            }
@@ -3129,6 +3133,7 @@ call_def_function(
 
            case ISN_2STRING:
            case ISN_2STRING_ANY:
+               SOURCING_LNUM = iptr->isn_lnum;
                if (do_2string(STACK_TV_BOT(iptr->isn_arg.number),
                        iptr->isn_type == ISN_2STRING_ANY) == FAIL)
                            goto on_error;