diff --git a/docs/scarpet/language/Containers.md b/docs/scarpet/language/Containers.md index 07d6993a..882f4f7f 100644 --- a/docs/scarpet/language/Containers.md +++ b/docs/scarpet/language/Containers.md @@ -187,10 +187,10 @@ other parts. In that case consecutive calls to `slice` will refer to index `0` t cannot go back nor track where they are in the sequence (see examples).
-slice([0,1,2,3,4,5], 1, 3)  => [1, 2, 3]
+slice([0,1,2,3,4,5], 1, 3)  => [1, 2]
 slice('foobar', 0, 1)  => 'f'
 slice('foobar', 3)  => 'bar'
-slice(range(10), 3, 5)  => [3, 4, 5]
+slice(range(10), 3, 5)  => [3, 4]
 slice(range(10), 5)  => [5, 6, 7, 8, 9]
 r = range(100); [slice(r, 5, 7), slice(r, 1, 3)]  => [[5, 6], [8, 9]]
 
diff --git a/src/main/java/carpet/script/value/ListValue.java b/src/main/java/carpet/script/value/ListValue.java index 7fd693eb..de316668 100644 --- a/src/main/java/carpet/script/value/ListValue.java +++ b/src/main/java/carpet/script/value/ListValue.java @@ -341,7 +341,7 @@ public class ListValue extends AbstractListValue implements ContainerValueInterf int from = normalizeIndex(fromDesc, size); if (toDesc == null) return new ListValue((Collection) getItems().subList(from, size)); - int to = normalizeIndex(toDesc, size); + int to = normalizeIndex(toDesc, size+1); if (from > to) return ListValue.of(); return new ListValue((Collection) getItems().subList(from, to)); diff --git a/src/main/java/carpet/script/value/Value.java b/src/main/java/carpet/script/value/Value.java index 5f228c7d..5548d83f 100644 --- a/src/main/java/carpet/script/value/Value.java +++ b/src/main/java/carpet/script/value/Value.java @@ -186,7 +186,7 @@ public abstract class Value implements Comparable, Cloneable int size = value.length(); int from = ListValue.normalizeIndex(fromDesc, size); if (toDesc == null) return new StringValue(value.substring(from)); - int to = ListValue.normalizeIndex(toDesc, size); + int to = ListValue.normalizeIndex(toDesc, size+1); if (from > to) return StringValue.EMPTY; return new StringValue(value.substring(from, to)); }