Actually there’s still an issue:

+function sc_objectEqual(x, y) {
+  if (!(x instanceof Object) || !(y instanceof Object)) return false;
+    // if they are not strictly equal, they both need to be Objects
+
+  if (x.constructor !== y.constructor) return false;
+    // they must have the exact same prototype chain, the closest we can do is
+    // test there constructor.
+
+   for (var p in x) {
+      if (!x.hasOwnProperty(p)) continue;
+      // other properties were tested using x.constructor === y.constructor
+
+      if (!y.hasOwnProperty(p)) return false;
+      // allows to compare x[ p ] and y[ p ] when set to undefined
+
+      if (x[p] === y[p]) continue;
+      // if they have the same strict value or identity then they are equal
+
+      if (typeof(x[p]) !== "object") return false;
+      // Numbers, Strings, Functions, Booleans must be strictly equal
+
+      if ( !sc_isEqual(x[p],y[p])) return false;
+      // Objects and Arrays must be tested recursively
+   }
+
+   for (var p in y) {
+      if (y.hasOwnProperty(p) && !x.hasOwnProperty(p)) return false;
+      // allows x[ p ] to be set to undefined
+   }
+   return true;
+}

Problem is that objects may have a different ‘hop_serialize_context_def’
property, yet be otherwise equal at the Scheme level.

Shouldn’t the above code skip ‘hop_serialize_context_def’, and perhaps
‘hop_serialize_context_key’?

Thanks,
Ludo’.

Reply via email to