mirror of
https://github.com/neovim/neovim.git
synced 2025-10-07 02:16:31 +00:00
vim-patch:8.1.0802: negative index doesn't work for Blob
Problem: Negative index doesn't work for Blob.
Solution: Make it work, add a test. (closes vim/vim#3856)
a5be9b6248
Leave tv_blob_get()'s return type untouched.
This commit is contained in:
@@ -4647,9 +4647,11 @@ eval_index(
|
||||
tv_blob_set_ret(rettv, blob);
|
||||
}
|
||||
} else {
|
||||
// The resulting variable is a string of a single
|
||||
// character. If the index is too big or negative the
|
||||
// result is empty.
|
||||
// The resulting variable is a byte value.
|
||||
// If the index is too big or negative that is an error.
|
||||
if (n1 < 0) {
|
||||
n1 = len + n1;
|
||||
}
|
||||
if (n1 < len && n1 >= 0) {
|
||||
const int v = (int)tv_blob_get(rettv->vval.v_blob, n1);
|
||||
tv_clear(rettv);
|
||||
|
@@ -2266,7 +2266,7 @@ void tv_blob_copy(typval_T *const from, typval_T *const to)
|
||||
to->vval.v_blob = NULL;
|
||||
} else {
|
||||
tv_blob_alloc_ret(to);
|
||||
const int len = from->vval.v_blob->bv_ga.ga_len;
|
||||
int len = from->vval.v_blob->bv_ga.ga_len;
|
||||
|
||||
if (len > 0) {
|
||||
to->vval.v_blob->bv_ga.ga_data
|
||||
|
@@ -95,6 +95,13 @@ func Test_blob_get()
|
||||
call assert_equal(999, get(b, 5, 999))
|
||||
call assert_equal(-1, get(b, -8))
|
||||
call assert_equal(999, get(b, -8, 999))
|
||||
|
||||
call assert_equal(0x00, b[0])
|
||||
call assert_equal(0x22, b[2])
|
||||
call assert_equal(0x44, b[4])
|
||||
call assert_equal(0x44, b[-1])
|
||||
call assert_fails('echo b[5]', 'E979:')
|
||||
call assert_fails('echo b[-8]', 'E979:')
|
||||
endfunc
|
||||
|
||||
func Test_blob_to_string()
|
||||
|
Reference in New Issue
Block a user