patch 8.2.2304: Vim9: no test for unletting an imported variable

Problem:    Vim9: no test for unletting an imported variable.
Solution:   Add a test.  Fix line number in error.
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index f2d09fc..2a21ca0 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -1349,6 +1349,11 @@
   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 @@
   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:')
+    'var ll = [1]',
+    'unlet ll[2]',
+    ], 'E684:', 2)
   CheckDefExecFailure([
-   'var dd = test_null_dict()',
-   'unlet dd["a"]',
-   ], 'E716:')
+    'var ll = [1]',
+    'unlet ll[g:astring]',
+    ], 'E39:', 2)
   CheckDefExecFailure([
-   'var dd = {a: 1}',
-   'unlet dd["b"]',
-   ], 'E716:')
+    'var dd = test_null_dict()',
+    'unlet dd["a"]',
+    ], 'E716:', 2)
+  CheckDefExecFailure([
+    '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 @@
    '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
diff --git a/src/version.c b/src/version.c
index a2553fc..77f032d 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2304,
+/**/
     2303,
 /**/
     2302,
diff --git a/src/vim9execute.c b/src/vim9execute.c
index d72c7fa..b6297d7 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -1917,6 +1917,7 @@
 			// 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 @@
 			    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 @@
 			// 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 @@
 			    li = list_find(l, n);
 			    if (li == NULL)
 			    {
+				SOURCING_LNUM = iptr->isn_lnum;
 				semsg(_(e_listidx), n);
 				status = FAIL;
 			    }
@@ -3129,6 +3133,7 @@
 
 	    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;