summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Dolan <mu@netsoc.tcd.ie>2012-09-10 13:06:46 +0100
committerStephen Dolan <mu@netsoc.tcd.ie>2012-09-10 13:06:46 +0100
commit5c25c906576692c1d08e02e4a5fc0c5dca3a5f96 (patch)
treeaaf62b38312f28023e62da44f6cc9eb5f5986a73
parentc2593dc417fb23b5410f7f0f99a5a570ced6f658 (diff)
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.
-rw-r--r--c/jv.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/c/jv.c b/c/jv.c
index 762bad89..35ade789 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;