summaryrefslogtreecommitdiffstats
path: root/src/jv.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/jv.c')
-rw-r--r--src/jv.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/jv.c b/src/jv.c
index 5e54d2f3..c2448a7c 100644
--- a/src/jv.c
+++ b/src/jv.c
@@ -296,10 +296,18 @@ static jv jvp_array_slice(jv a, int start, int end) {
jv_free(a);
return jv_array();
}
- // FIXME FIXME FIXME large offsets
- a.offset += start;
- a.size = end - start;
- return a;
+
+ if (a.offset + start > 1 << (sizeof(a.offset) * CHAR_BIT)) {
+ jv r = jv_array_sized(end - start);
+ for (int i = start; i < end; i++)
+ r = jv_array_append(r, jv_array_get(jv_copy(a), i));
+ jv_free(a);
+ return r;
+ } else {
+ a.offset += start;
+ a.size = end - start;
+ return a;
+ }
}
/*