From: Stephen Dolan Date: Mon, 10 Sep 2012 12:06:46 +0000 (+0100) Subject: When comparing two objects for equality, we don't need to recurse X-Git-Tag: jq-1.1~66 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5c25c906576692c1d08e02e4a5fc0c5dca3a5f96;p=jq 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. --- diff --git a/c/jv.c b/c/jv.c index 762bad8..35ade78 100644 --- a/c/jv.c +++ b/c/jv.c @@ -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;