more micro-optimizations

This commit is contained in:
Danny Yoo 2012-02-10 14:57:34 -05:00
parent 97d8848e01
commit b7ca54058c

View File

@ -10,6 +10,7 @@
var EMPTY = baselib.lists.EMPTY; var EMPTY = baselib.lists.EMPTY;
var isPair = baselib.lists.isPair; var isPair = baselib.lists.isPair;
var isList = baselib.lists.isList;
var makeLowLevelEqHash = baselib.hashes.makeLowLevelEqHash; var makeLowLevelEqHash = baselib.hashes.makeLowLevelEqHash;
@ -75,26 +76,14 @@
var makeCheckListofArgumentType = function (predicate, predicateName) { var makeCheckListofArgumentType = function (predicate, predicateName) {
var listPredicate = function (x) { var listPredicate = function (x) {
var seen = makeLowLevelEqHash(); if (! isList(x)) { return false; }
while (true) { while (true) {
if (x === EMPTY){ if (x === EMPTY){
return true; return true;
} }
if (!isPair(x)) {
return false;
}
if(seen.containsKey(x)) {
// raise an error? we've got a cycle!
return false;
}
if (! predicate(x.first)) { if (! predicate(x.first)) {
return false; return false;
} }
seen.put(x, true);
x = x.rest; x = x.rest;
} }
}; };
@ -210,7 +199,7 @@
'pair'); 'pair');
var checkList = makeCheckArgumentType( var checkList = makeCheckArgumentType(
baselib.lists.isList, isList,
'list'); 'list');
var checkVector = makeCheckArgumentType( var checkVector = makeCheckArgumentType(