added defn for equal that works better
This commit is contained in:
parent
299f825c72
commit
1c7bac3393
19
runtime.js
19
runtime.js
|
@ -274,7 +274,24 @@ var Primitives = (function() {
|
||||||
'equal?': function(arity, returnLabel) {
|
'equal?': function(arity, returnLabel) {
|
||||||
var firstArg = MACHINE.env[MACHINE.env.length-1];
|
var firstArg = MACHINE.env[MACHINE.env.length-1];
|
||||||
var secondArg = MACHINE.env[MACHINE.env.length-2];
|
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,
|
'call/cc': new Closure(callCCEntry,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user