1
0
mirror of https://github.com/stedolan/jq.git synced 2024-05-11 05:55:39 +00:00

When comparing two objects for equality, we don't need to recurse

into e.g. array elements if the two objects are the same array.
This commit is contained in:
Stephen Dolan
2012-09-10 13:06:46 +01:00
parent c2593dc417
commit 5c25c90657

18
c/jv.c
View File

@ -824,23 +824,23 @@ int jv_equal(jv a, jv b) {
int r;
if (jv_get_kind(a) != jv_get_kind(b)) {
r = 0;
} else if (jv_get_kind(a) == JV_KIND_NUMBER) {
r = jv_number_value(a) == jv_number_value(b);
} else if (a.val.complex.ptr == b.val.complex.ptr &&
a.val.complex.i[0] == b.val.complex.i[0] &&
a.val.complex.i[1] == b.val.complex.i[1]) {
r = 1;
} else {
switch (jv_get_kind(a)) {
case JV_KIND_NUMBER:
r = jv_number_value(a) == jv_number_value(b);
break;
case JV_KIND_ARRAY: {
case JV_KIND_ARRAY:
r = jvp_array_equal(&a.val.complex, &b.val.complex);
break;
}
case JV_KIND_STRING: {
case JV_KIND_STRING:
r = jvp_string_equal(&a.val.complex, &b.val.complex);
break;
}
case JV_KIND_OBJECT: {
case JV_KIND_OBJECT:
r = jvp_object_equal(&a.val.complex, &b.val.complex);
break;
}
default:
r = 1;
break;