patch 8.2.2344: using inclusive index for slice is not always desired
Problem: Using inclusive index for slice is not always desired.
Solution: Add the slice() method, which has an exclusive index. (closes
#7408)
diff --git a/src/list.c b/src/list.c
index f7842fa..0bca0b5 100644
--- a/src/list.c
+++ b/src/list.c
@@ -905,14 +905,15 @@
list_slice_or_index(
list_T *list,
int range,
- long n1_arg,
- long n2_arg,
+ varnumber_T n1_arg,
+ varnumber_T n2_arg,
+ int exclusive,
typval_T *rettv,
int verbose)
{
long len = list_len(list);
- long n1 = n1_arg;
- long n2 = n2_arg;
+ varnumber_T n1 = n1_arg;
+ varnumber_T n2 = n2_arg;
typval_T var1;
if (n1 < 0)
@@ -936,7 +937,9 @@
if (n2 < 0)
n2 = len + n2;
else if (n2 >= len)
- n2 = len - 1;
+ n2 = len - (exclusive ? 0 : 1);
+ if (exclusive)
+ --n2;
if (n2 < 0 || n2 + 1 < n1)
n2 = -1;
l = list_slice(list, n1, n2);