[walker] Fix broken handling of node predicates
This commit is contained in:
12
util/walk.js
12
util/walk.js
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user