Merge pull request #1753 from loganfsmyth/optimize-call

Optimize NodePath#call a bit
This commit is contained in:
Sebastian McKenzie 2015-06-15 10:46:10 +01:00
commit 7e080aa9d2
2 changed files with 30 additions and 17 deletions

View File

@ -9,10 +9,9 @@ export function call(key) {
if (!node) return; if (!node) return;
var opts = this.opts; var opts = this.opts;
if (!opts[key] && !opts[node.type]) return;
var fns = [].concat(opts[key]); for (var fns of [opts[key], opts[node.type] && opts[node.type][key]]){
if (opts[node.type]) fns = fns.concat(opts[node.type][key]); if (!fns) continue;
for (var fn of (fns: Array)) { for (var fn of (fns: Array)) {
if (!fn) continue; if (!fn) continue;
@ -37,6 +36,7 @@ export function call(key) {
} }
} }
} }
}
/** /**
* Description * Description

View File

@ -21,6 +21,8 @@ export function explode(visitor) {
// ensure visitors are objects // ensure visitors are objects
ensureEntranceObjects(visitor); ensureEntranceObjects(visitor);
ensureCallbackArrays(visitor);
// add type wrappers // add type wrappers
for (let nodeType in visitor) { for (let nodeType in visitor) {
if (shouldIgnoreKey(nodeType)) continue; if (shouldIgnoreKey(nodeType)) continue;
@ -73,6 +75,12 @@ export function explode(visitor) {
} }
} }
for (let nodeType in visitor) {
if (shouldIgnoreKey(nodeType)) continue;
ensureCallbackArrays(visitor[nodeType]);
}
return visitor; return visitor;
} }
@ -126,6 +134,11 @@ function ensureEntranceObjects(obj) {
} }
} }
function ensureCallbackArrays(obj){
if (obj.enter && !Array.isArray(obj.enter)) obj.enter = [obj.enter];
if (obj.exit && !Array.isArray(obj.exit)) obj.exit = [obj.exit];
}
function addQueries(visitor) { function addQueries(visitor) {
for (var selector in visitor.queries) { for (var selector in visitor.queries) {
var fns = visitor.queries[selector]; var fns = visitor.queries[selector];