123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- #!/usr/bin/env node
- var fs = require("fs")
- var acornSrc = fs.readFileSync(require.resolve("../dist/acorn"), "utf8")
- var acorn = require("../dist/acorn"), walk = require("../dist/walk")
- var ast = acorn.parse(acornSrc)
- var touchups = [], uses = []
- var makePred
- walk.simple(ast, {
- FunctionDeclaration: function(node) {
- if (node.id.name == "makePredicate") {
- makePred = node
- touchups.push({text: "// Removed to create an eval-free library", from: node.start, to: node.end})
- }
- },
- ObjectExpression: function(node) {
- node.properties.forEach(function(prop) {
- if (prop.value.type == "CallExpression" &&
- prop.value.callee.name == "makePredicate")
- uses.push(prop.value)
- })
- }
- })
- var results = []
- var dryRun = acornSrc.slice(0, makePred.end) + "; makePredicate = (function(mp) {" +
- "return function(words) { var r = mp(words); predicates.push(r); return r }})(makePredicate);" +
- acornSrc.slice(makePred.end)
- ;(new Function("predicates", dryRun))(results)
- uses.forEach(function (node, i) {
- touchups.push({text: results[i].toString(), from: node.start, to: node.end})
- })
- var result = "", pos = 0
- touchups.sort(function(a, b) { return a.from - b.from })
- touchups.forEach(function(touchup) {
- result += acornSrc.slice(pos, touchup.from)
- result += touchup.text
- pos = touchup.to
- })
- result += acornSrc.slice(pos)
- process.stdout.write(result)
|