breakable
Version:
Break out of functions, recursive or not, in a more composable way than by using exceptions explicitly. Non-local return.
15 lines (12 loc) • 412 B
JavaScript
var breakable = require("./breakable");
var esprima = require("esprima").parse;
var traverse = require("ast-traverse");
var ast = esprima("f(!x, y)");
var val = breakable(function(brk) {
traverse(ast, {pre: function(node) {
if (node.type === "UnaryExpression" && node.operator === "!") {
brk(node.argument);
}
}});
});
console.dir(val); // { type: 'Identifier', name: 'x' }