static int jvp_array_equal(jv a, jv b) { if (jvp_array_length(a) != jvp_array_length(b)) return 0; if (jvp_array_ptr(a) == jvp_array_ptr(b) && jvp_array_offset(a) == jvp_array_offset(b)) return 1; for (int i=0; i<jvp_array_length(a); i++) { if (!jv_equal(jv_copy(*jvp_array_read(a, i)), jv_copy(*jvp_array_read(b, i)))) return 0; } return 1; }
static int jvp_array_equal(jv_nontrivial* a, jv_nontrivial* b) { if (jvp_array_length(a) != jvp_array_length(b)) return 0; if (jvp_array_ptr(a) == jvp_array_ptr(b) && a->i[0] == b->i[0]) return 1; for (int i=0; i<jvp_array_length(a); i++) { if (!jv_equal(jv_copy(*jvp_array_read(a, i)), jv_copy(*jvp_array_read(b,i)))) return 0; } return 1; }
jv jv_array_get(jv j, int idx) { assert(jv_get_kind(j) == JV_KIND_ARRAY); jv* slot = jvp_array_read(j, idx); jv val; if (slot) { val = jv_copy(*slot); } else { val = jv_invalid(); } jv_free(j); return val; }