diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/eval.c | 14 | ||||
-rw-r--r-- | src/nvim/testdir/test_blob.vim | 7 |
2 files changed, 20 insertions, 1 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index eb8f0406c4..35c3b1b876 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -9700,7 +9700,6 @@ int var_item_copy(const vimconv_T *const conv, case VAR_PARTIAL: case VAR_BOOL: case VAR_SPECIAL: - case VAR_BLOB: tv_copy(from, to); break; case VAR_STRING: @@ -9734,6 +9733,19 @@ int var_item_copy(const vimconv_T *const conv, ret = FAIL; } break; + case VAR_BLOB: + to->v_type = VAR_BLOB; + if (from->vval.v_blob == NULL) { + to->vval.v_blob = NULL; + } else { + tv_blob_alloc_ret(to); + const int len = from->vval.v_blob->bv_ga.ga_len; + + to->vval.v_blob->bv_ga.ga_data + = xmemdup(from->vval.v_blob->bv_ga.ga_data, (size_t)len); + to->vval.v_blob->bv_ga.ga_len = len; + } + break; case VAR_DICT: to->v_type = VAR_DICT; to->v_lock = VAR_UNLOCKED; diff --git a/src/nvim/testdir/test_blob.vim b/src/nvim/testdir/test_blob.vim index 5bee25a0a2..b2b5ddcfd6 100644 --- a/src/nvim/testdir/test_blob.vim +++ b/src/nvim/testdir/test_blob.vim @@ -112,7 +112,14 @@ func Test_blob_compare() call assert_false(b1 is b2) let b2 = b1 + call assert_true(b1 == b2) call assert_true(b1 is b2) + let b2 = copy(b1) + call assert_true(b1 == b2) + call assert_false(b1 is b2) + let b2 = b1[:] + call assert_true(b1 == b2) + call assert_false(b1 is b2) call assert_fails('let x = b1 > b2') call assert_fails('let x = b1 < b2') |