Merge pull request #13840 from s-hadinger/berry_list_range_neg

Berry fix ranges with negative indices
This commit is contained in:
s-hadinger 2021-11-28 19:53:19 +01:00 committed by GitHub
commit 1580e52fa1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 0 deletions

View File

@ -134,9 +134,15 @@ static int item_range(bvm *vm)
/* get index range */
be_getmember(vm, 2, "__lower__");
lower = be_toint(vm, -1);
if (lower < 0) {
lower = size + lower;
}
be_pop(vm, 1);
be_getmember(vm, 2, "__upper__");
upper = be_toint(vm, -1);
if (upper < 0) {
upper = size + upper;
}
be_pop(vm, 1);
/* protection scope */
upper = upper < size ? upper : size - 1;

View File

@ -127,3 +127,14 @@ assert([1,2,3].concat('-') == "1-2-3")
assert([1,"2",3].concat('-') == "1-2-3")
assert(["",2,3].concat('-') == "-2-3")
#- negative indices -#
assert([1,2,3,4][0] == 1)
assert([1,2,3,4][-1] == 4)
assert([1,2,3,4][-2] == 3)
assert([1,2,3,4][1..10] == [2,3,4])
assert([1,2,3,4][1..-1] == [2,3,4])
assert([1,2,3,4][1..-2] == [2,3])
assert([1,2,3,4][3..2] == [])
assert([1,2,3,4][2..-3] == [])