patch 8.2.1867: Vim9: argument to add() not checked for blob
Problem: Vim9: argument to add() not checked for blob.
Solution: Add the BLOBAPPEND instruction.
diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim
index fe1ce66..97797bc 100644
--- a/src/testdir/test_vim9_disassemble.vim
+++ b/src/testdir/test_vim9_disassemble.vim
@@ -301,6 +301,34 @@
res)
enddef
+def s:BlobAdd()
+ var b: blob = 0z
+ add(b, 123)
+ add(b, g:aNumber)
+enddef
+
+def Test_disassemble_blob_add()
+ var res = execute('disass s:BlobAdd')
+ assert_match('<SNR>\d*_BlobAdd\_s*' ..
+ 'var b: blob = 0z\_s*' ..
+ '\d PUSHBLOB 0z\_s*' ..
+ '\d STORE $0\_s*' ..
+ 'add(b, 123)\_s*' ..
+ '\d LOAD $0\_s*' ..
+ '\d PUSHNR 123\_s*' ..
+ '\d BLOBAPPEND\_s*' ..
+ '\d DROP\_s*' ..
+ 'add(b, g:aNumber)\_s*' ..
+ '\d LOAD $0\_s*' ..
+ '\d\+ LOADG g:aNumber\_s*' ..
+ '\d\+ CHECKTYPE number stack\[-1\]\_s*' ..
+ '\d\+ BLOBAPPEND\_s*' ..
+ '\d\+ DROP\_s*' ..
+ '\d\+ PUSHNR 0\_s*' ..
+ '\d\+ RETURN',
+ res)
+enddef
+
def s:ScriptFuncUnlet()
g:somevar = "value"
unlet g:somevar
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index 4af136c..e8072d3 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -1791,9 +1791,25 @@
enddef
def Test_blob_add()
- var b: blob = 0z12
- add(b, 0x34)
- assert_equal(0z1234, b)
+ var b1: blob = 0z12
+ add(b1, 0x34)
+ assert_equal(0z1234, b1)
+
+ var b2: blob # defaults to empty blob
+ add(b2, 0x67)
+ assert_equal(0z67, b2)
+
+ var lines =<< trim END
+ var b: blob
+ add(b, "x")
+ END
+ CheckDefFailure(lines, 'E1012:', 2)
+
+ lines =<< trim END
+ var b: blob = test_null_blob()
+ add(b, 123)
+ END
+ CheckDefExecFailure(lines, 'E1131:', 2)
enddef
def SID(): number