diff options
Diffstat (limited to 'src/jv.c')
-rw-r--r-- | src/jv.c | 16 |
1 files changed, 12 insertions, 4 deletions
@@ -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; + } } /* |