mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.1.0756: copy() does not make a copy of a Blob
Problem: copy() does not make a copy of a Blob. Solution: Make a copy.
This commit is contained in:
parent
2ea773b468
commit
3d28b58c51
16
src/eval.c
16
src/eval.c
@ -8198,7 +8198,6 @@ item_copy(
|
||||
case VAR_SPECIAL:
|
||||
case VAR_JOB:
|
||||
case VAR_CHANNEL:
|
||||
case VAR_BLOB:
|
||||
copy_tv(from, to);
|
||||
break;
|
||||
case VAR_LIST:
|
||||
@ -8217,6 +8216,21 @@ item_copy(
|
||||
if (to->vval.v_list == NULL)
|
||||
ret = FAIL;
|
||||
break;
|
||||
case VAR_BLOB:
|
||||
to->v_type = VAR_BLOB;
|
||||
if (from->vval.v_blob == NULL)
|
||||
to->vval.v_blob = NULL;
|
||||
else if (rettv_blob_alloc(to) == FAIL)
|
||||
ret = FAIL;
|
||||
else
|
||||
{
|
||||
int len = from->vval.v_blob->bv_ga.ga_len;
|
||||
|
||||
to->vval.v_blob->bv_ga.ga_data =
|
||||
vim_memsave(from->vval.v_blob->bv_ga.ga_data, len);
|
||||
to->vval.v_blob->bv_ga.ga_len = len;
|
||||
}
|
||||
break;
|
||||
case VAR_DICT:
|
||||
to->v_type = VAR_DICT;
|
||||
to->v_lock = 0;
|
||||
|
@ -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')
|
||||
|
@ -795,6 +795,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
756,
|
||||
/**/
|
||||
755,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user