From 1c7bac33936b6425933b1c5bcbab7046ede90a46 Mon Sep 17 00:00:00 2001 From: dyoo Date: Tue, 15 Mar 2011 10:12:13 -0400 Subject: [PATCH] added defn for equal that works better --- runtime.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/runtime.js b/runtime.js index 60f0f8e..3a16aad 100644 --- a/runtime.js +++ b/runtime.js @@ -274,7 +274,24 @@ var Primitives = (function() { 'equal?': function(arity, returnLabel) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var secondArg = MACHINE.env[MACHINE.env.length-2]; - return firstArg == secondArg; + var lset = [firstArg], rset = [secondArg]; + while (lset.length !== 0 && rset.length !== 0) { + var lhs = lset.pop(); + var rhs = rset.pop(); + if (lhs === rhs) { + continue; + } else if (typeof(lhs) === 'object' && + typeof(rhs) === 'object' && + typeof(lhs.length) === 'number' && + typeof(rhs.length) === 'number' && + lhs.length === rhs.length) { + lset.push.apply(lset, lhs); + rset.push.apply(rset, rhs); + } else { + return false; + } + } + return true; }, 'call/cc': new Closure(callCCEntry,