[walker] Fix broken handling of node predicates

This commit is contained in:
Marijn Haverbeke
2013-02-14 14:02:48 +01:00
parent 006d5f1c04
commit adcb354498

View File

@@ -43,7 +43,7 @@
function makeTest(test) { function makeTest(test) {
if (typeof test == "string") if (typeof test == "string")
return function(node) { node.type == test; }; return function(type) { return type == test; };
else if (!test) else if (!test)
return function() { return true; }; return function() { return true; };
else else
@@ -64,7 +64,7 @@
if ((start == null || node.start <= start) && if ((start == null || node.start <= start) &&
(end == null || node.end >= end)) (end == null || node.end >= end))
base[type](node, st, c); base[type](node, st, c);
if (test(node) && if (test(type, node) &&
(start == null || node.start == start) && (start == null || node.start == start) &&
(end == null || node.end == end)) (end == null || node.end == end))
throw new Found(node, st); throw new Found(node, st);
@@ -84,11 +84,9 @@
if (!base) base = exports.base; if (!base) base = exports.base;
var c = function(node, st, override) { var c = function(node, st, override) {
var type = override || node.type; var type = override || node.type;
var inside = node.start <= pos && node.end >= pos; if (node.start > pos || node.end < pos) return;
if (inside) base[type](node, st, c);
base[type](node, st, c); if (test(type, node)) throw new Found(node, st);
if (inside && test(node))
throw new Found(node, st);
}; };
c(node, state); c(node, state);
} catch (e) { } catch (e) {