forked from aniani/vim
patch 8.2.3336: behavior of negative index in list change changed
Problem: Behavior of negative index in list change changed. (Naruhiko
Nishino)
Solution: Only change it for Vim9 script. (closes #8749)
This commit is contained in:
@@ -1146,15 +1146,19 @@ list_slice_or_index(
|
||||
n1 = len + n1;
|
||||
if (n1 < 0 || n1 >= len)
|
||||
{
|
||||
// For a range we allow invalid values and return an empty
|
||||
// list. A list index out of range is an error.
|
||||
// For a range we allow invalid values and for legacy script return an
|
||||
// empty list, for Vim9 script start at the first item.
|
||||
// A list index out of range is an error.
|
||||
if (!range)
|
||||
{
|
||||
if (verbose)
|
||||
semsg(_(e_listidx), (long)n1_arg);
|
||||
return FAIL;
|
||||
}
|
||||
if (in_vim9script())
|
||||
n1 = n1 < 0 ? 0 : len;
|
||||
else
|
||||
n1 = len;
|
||||
}
|
||||
if (range)
|
||||
{
|
||||
|
||||
@@ -42,6 +42,23 @@ func Test_list_slice()
|
||||
let l[:1] += [1, 2]
|
||||
let l[2:] -= [1]
|
||||
call assert_equal([2, 4, 2], l)
|
||||
|
||||
let lines =<< trim END
|
||||
VAR l = [1, 2]
|
||||
call assert_equal([1, 2], l[:])
|
||||
call assert_equal([2], l[-1 : -1])
|
||||
call assert_equal([1, 2], l[-2 : -1])
|
||||
END
|
||||
call CheckLegacyAndVim9Success(lines)
|
||||
|
||||
let l = [1, 2]
|
||||
call assert_equal([], l[-3 : -1])
|
||||
|
||||
let lines =<< trim END
|
||||
var l = [1, 2]
|
||||
assert_equal([1, 2], l[-3 : -1])
|
||||
END
|
||||
call CheckDefAndScriptSuccess(lines)
|
||||
endfunc
|
||||
|
||||
" List identity
|
||||
|
||||
@@ -755,6 +755,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
3336,
|
||||
/**/
|
||||
3335,
|
||||
/**/
|
||||
|
||||
Reference in New Issue
Block a user