.foo[-1] = ... trips assertion (fix #490)
This commit is contained in:
1 parent
8cddb7c681
commit
2d1a75f550
2 files changed
+25
-1
No files matched your search
@@ -230,9 +230,13 @@ static jv* jvp_array_read(jv a, int i) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static jv* jvp_array_write(jv* a, int i) {
|
static jv* jvp_array_write(jv* a, int i) {
|
||||||
assert(i >= 0);
|
|
||||||
jvp_array* array = jvp_array_ptr(*a);
|
jvp_array* array = jvp_array_ptr(*a);
|
||||||
|
|
||||||
|
if (i < 0)
|
||||||
|
i = array->length + i;
|
||||||
|
if (i < 0)
|
||||||
|
i = 0;
|
||||||
|
|
||||||
int pos = i + jvp_array_offset(*a);
|
int pos = i + jvp_array_offset(*a);
|
||||||
if (pos < array->alloc_length && jvp_refcnt_unshared(a->u.ptr)) {
|
if (pos < array->alloc_length && jvp_refcnt_unshared(a->u.ptr)) {
|
||||||
// use existing array space
|
// use existing array space
|
||||||
|
|||||||
@@ -152,6 +152,26 @@ null
|
|||||||
[1,null,true,false,"abcdef",{},{"a":1,"b":2},[],[1,2,3,4,5],[1,2]]
|
[1,null,true,false,"abcdef",{},{"a":1,"b":2},[],[1,2,3,4,5],[1,2]]
|
||||||
[null,"bc",[],[2,3],[2]]
|
[null,"bc",[],[2,3],[2]]
|
||||||
|
|
||||||
|
#
|
||||||
|
# Negative array indices
|
||||||
|
#
|
||||||
|
|
||||||
|
.foo[-1] = 0
|
||||||
|
null
|
||||||
|
{"foo":[0]}
|
||||||
|
|
||||||
|
.foo[-2] = 0
|
||||||
|
null
|
||||||
|
{"foo":[0]}
|
||||||
|
|
||||||
|
.[-1] = 5
|
||||||
|
[0,1,2]
|
||||||
|
[0,1,5]
|
||||||
|
|
||||||
|
.[-2] = 5
|
||||||
|
[0,1,2]
|
||||||
|
[0,5,2]
|
||||||
|
|
||||||
#
|
#
|
||||||
# Multiple outputs, iteration
|
# Multiple outputs, iteration
|
||||||
#
|
#
|
||||||
|
|||||||
Reference in new issue
Block a user