more micro-optimizations
This commit is contained in:
parent
97d8848e01
commit
b7ca54058c
|
@ -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(
|
||||||
|
|
Loading…
Reference in New Issue
Block a user