patch 8.2.4642: Vim9: in :def function script var cannot be null

Problem:    Vim9: in :def function script var cannot be null.
Solution:   Only initialize a script variable when not set to a null value.
            (closes #10034)
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index 209bb10..e76e134 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -890,6 +890,93 @@
   unlet g:null_dict
   unlet g:not_null_list
 
+  # variables declared at script level used in a :def function
+  lines =<< trim END
+      vim9script
+      
+      var l_decl: list<number>
+      var l_empty = []
+      var l_null = null_list
+
+      def TestList()
+        assert_false(l_decl == null)
+        assert_false(l_decl is null_list)
+        assert_false(l_empty == null)
+        assert_false(l_empty is null_list)
+        assert_true(l_null == null)
+        assert_true(l_null is null_list)
+        assert_true(l_null == null_list)
+
+        add(l_decl, 6)
+        assert_equal([6], l_decl)
+        add(l_empty, 7)
+        assert_equal([7], l_empty)
+        var caught = false
+        try
+          add(l_null, 9)
+        catch /E1130:/
+          caught = true
+        endtry
+        assert_true(caught)
+      enddef
+      TestList()
+      
+      var b_decl: blob
+      var b_empty = 0z
+      var b_null = null_blob
+
+      def TestBlob()
+        assert_false(b_decl == null)
+        assert_false(b_decl is null_blob)
+        assert_false(b_empty == null)
+        assert_false(b_empty is null_blob)
+        assert_true(b_null == null)
+        assert_true(b_null is null_blob)
+        assert_true(b_null == null_blob)
+
+        add(b_decl, 6)
+        assert_equal(0z06, b_decl)
+        add(b_empty, 7)
+        assert_equal(0z07, b_empty)
+        var caught = false
+        try
+          add(b_null, 9)
+        catch /E1131:/
+          caught = true
+        endtry
+        assert_true(caught)
+      enddef
+      TestBlob()
+      
+      var d_decl: dict<number>
+      var d_empty = {}
+      var d_null = null_dict
+
+      def TestDict()
+        assert_false(d_decl == null)
+        assert_false(d_decl is null_dict)
+        assert_false(d_empty == null)
+        assert_false(d_empty is null_dict)
+        assert_true(d_null == null)
+        assert_true(d_null is null_dict)
+        assert_true(d_null == null_dict)
+
+        d_decl['a'] = 6
+        assert_equal({a: 6}, d_decl)
+        d_empty['b'] = 7
+        assert_equal({b: 7}, d_empty)
+        var caught = false
+        try
+          d_null['c'] = 9
+        catch /E1103:/
+          caught = true
+        endtry
+        assert_true(caught)
+      enddef
+      TestDict()
+  END
+  v9.CheckScriptSuccess(lines)
+
   lines =<< trim END
       var d: dict<func> = {f: null_function}
       assert_equal(null_function, d.f)