From 0fad84fe0656ce8e93409c4f429839879091e44b Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Sun, 28 Nov 2021 19:41:26 +0100 Subject: [PATCH] Berry fix ranges with negative indices --- lib/libesp32/Berry/src/be_listlib.c | 6 ++++++ lib/libesp32/Berry/tests/list.be | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/lib/libesp32/Berry/src/be_listlib.c b/lib/libesp32/Berry/src/be_listlib.c index b584aef90..a98b679df 100644 --- a/lib/libesp32/Berry/src/be_listlib.c +++ b/lib/libesp32/Berry/src/be_listlib.c @@ -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; diff --git a/lib/libesp32/Berry/tests/list.be b/lib/libesp32/Berry/tests/list.be index d0b9099ba..a2da2ca47 100644 --- a/lib/libesp32/Berry/tests/list.be +++ b/lib/libesp32/Berry/tests/list.be @@ -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] == []) \ No newline at end of file