patch 8.2.2781: add() silently skips when adding to null list or blob

Problem:    Add() silently skips when adding to null list or blob.
Solution:   Give an error in Vim9 script.  Allocate blob when it is NULL like
            with list and dict.
diff --git a/src/testdir/test_blob.vim b/src/testdir/test_blob.vim
index fa482b4..f54d773 100644
--- a/src/testdir/test_blob.vim
+++ b/src/testdir/test_blob.vim
@@ -316,27 +316,59 @@
 endfunc
 
 func Test_blob_concatenate()
-  let b = 0z0011
-  let b += 0z2233
-  call assert_equal(0z00112233, b)
+  let lines =<< trim END
+      VAR b = 0z0011
+      LET b += 0z2233
+      call assert_equal(0z00112233, b)
 
-  call assert_fails('let b += "a"')
-  call assert_fails('let b += 88')
+      LET b = 0zDEAD + 0zBEEF
+      call assert_equal(0zDEADBEEF, b)
+  END
+  call CheckLegacyAndVim9Success(lines)
 
-  let b = 0zDEAD + 0zBEEF
-  call assert_equal(0zDEADBEEF, b)
+  let lines =<< trim END
+      VAR b = 0z0011
+      LET b += "a"
+  END
+  call CheckLegacyAndVim9Failure(lines, ['E734:', 'E1012:', 'E734:'])
+
+  let lines =<< trim END
+      VAR b = 0z0011
+      LET b += 88
+  END
+  call CheckLegacyAndVim9Failure(lines, ['E734:', 'E1012:', 'E734:'])
 endfunc
 
 func Test_blob_add()
+  let lines =<< trim END
+      VAR b = 0z0011
+      call add(b, 0x22)
+      call assert_equal(0z001122, b)
+  END
+  call CheckLegacyAndVim9Success(lines)
+
+  " Only works in legacy script
   let b = 0z0011
-  call add(b, 0x22)
-  call assert_equal(0z001122, b)
   call add(b, '51')
-  call assert_equal(0z00112233, b)
+  call assert_equal(0z001133, b)
   call assert_equal(1, add(test_null_blob(), 0x22))
 
-  call assert_fails('call add(b, [9])', 'E745:')
-  call assert_fails('call add("", 0x01)', 'E897:')
+  let lines =<< trim END
+      VAR b = 0z0011
+      call add(b, [9])
+  END
+  call CheckLegacyAndVim9Failure(lines, ['E745:', 'E1012:', 'E745:'])
+
+  let lines =<< trim END
+      VAR b = 0z0011
+      call add("", 0x01)
+  END
+  call CheckLegacyAndVim9Failure(lines, 'E897:')
+
+  let lines =<< trim END
+      add(test_null_blob(), 0x22)
+  END
+  call CheckDefExecAndScriptFailure(lines, 'E1131:')
 endfunc
 
 func Test_blob_empty()
diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim
index 5c13d51..bf15a41 100644
--- a/src/testdir/test_vim9_builtin.vim
+++ b/src/testdir/test_vim9_builtin.vim
@@ -87,10 +87,23 @@
   CheckDefFailure(lines, 'E1012:', 2)
 
   lines =<< trim END
+      add(test_null_list(), 123)
+  END
+  CheckDefExecAndScriptFailure(lines, 'E1130:', 1)
+
+  lines =<< trim END
       var l: list<number> = test_null_list()
       add(l, 123)
   END
   CheckDefExecFailure(lines, 'E1130:', 2)
+
+  # Getting variable with NULL list allocates a new list at script level
+  lines =<< trim END
+      vim9script
+      var l: list<number> = test_null_list()
+      add(l, 123)
+  END
+  CheckScriptSuccess(lines)
 enddef
 
 def Test_add_blob()
@@ -109,10 +122,23 @@
   CheckDefFailure(lines, 'E1012:', 2)
 
   lines =<< trim END
+      add(test_null_blob(), 123)
+  END
+  CheckDefExecAndScriptFailure(lines, 'E1131:', 1)
+
+  lines =<< trim END
       var b: blob = test_null_blob()
       add(b, 123)
   END
   CheckDefExecFailure(lines, 'E1131:', 2)
+
+  # Getting variable with NULL blob allocates a new blob at script level
+  lines =<< trim END
+      vim9script
+      var b: blob = test_null_blob()
+      add(b, 123)
+  END
+  CheckScriptSuccess(lines)
 enddef
 
 def Test_append()