summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/example
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/example')
-rwxr-xr-xdeps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/example/add-braces44
-rwxr-xr-xdeps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/example/generic-identity17
-rwxr-xr-xdeps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/example/identity8
-rwxr-xr-xdeps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/example/to-while84
4 files changed, 153 insertions, 0 deletions
diff --git a/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/example/add-braces b/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/example/add-braces
new file mode 100755
index 0000000000..0c6901d09f
--- /dev/null
+++ b/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/example/add-braces
@@ -0,0 +1,44 @@
+#!/usr/bin/env node
+
+var recast = require("recast");
+var types = recast.types;
+var n = types.namedTypes;
+var b = types.builders;
+
+require("recast").run(function(ast, callback) {
+ recast.visit(ast, {
+ visitIfStatement: function(path) {
+ var stmt = path.node;
+ stmt.consequent = fix(stmt.consequent);
+
+ var alt = stmt.alternate;
+ if (!n.IfStatement.check(alt)) {
+ stmt.alternate = fix(alt);
+ }
+
+ this.traverse(path);
+ },
+
+ visitWhileStatement: visitLoop,
+ visitForStatement: visitLoop,
+ visitForInStatement: visitLoop
+ });
+
+ callback(ast);
+});
+
+function visitLoop(path) {
+ var loop = path.node;
+ loop.body = fix(loop.body);
+ this.traverse(path);
+}
+
+function fix(clause) {
+ if (clause) {
+ if (!n.BlockStatement.check(clause)) {
+ clause = b.blockStatement([clause]);
+ }
+ }
+
+ return clause;
+}
diff --git a/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/example/generic-identity b/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/example/generic-identity
new file mode 100755
index 0000000000..a8364c350d
--- /dev/null
+++ b/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/example/generic-identity
@@ -0,0 +1,17 @@
+#!/usr/bin/env node
+
+// This script should reprint the contents of the given file without
+// reusing the original source, but with identical AST structure.
+
+var recast = require("recast");
+
+recast.run(function(ast, callback) {
+ recast.visit(ast, {
+ visitNode: function(path) {
+ this.traverse(path);
+ path.node.original = null;
+ }
+ });
+
+ callback(ast);
+});
diff --git a/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/example/identity b/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/example/identity
new file mode 100755
index 0000000000..62981b8f68
--- /dev/null
+++ b/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/example/identity
@@ -0,0 +1,8 @@
+#!/usr/bin/env node
+
+// This script should echo the contents of the given file without
+// modification.
+
+require("recast").run(function(ast, callback) {
+ callback(ast);
+});
diff --git a/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/example/to-while b/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/example/to-while
new file mode 100755
index 0000000000..99222223f8
--- /dev/null
+++ b/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/example/to-while
@@ -0,0 +1,84 @@
+#!/usr/bin/env node
+
+// This script converts for and do-while loops into equivalent while loops.
+// Note that for-in statements are left unmodified, as they do not have a
+// simple analogy to while loops. Also note that labeled continue statements
+// are not correctly handled at this point, and will trigger an assertion
+// failure if encountered.
+
+var assert = require("assert");
+var recast = require("recast");
+var types = recast.types;
+var n = types.namedTypes;
+var b = types.builders;
+
+recast.run(function(ast, callback) {
+ recast.visit(ast, {
+ visitForStatement: function(path) {
+ var fst = path.node;
+
+ path.replace(
+ fst.init,
+ b.whileStatement(
+ fst.test,
+ insertBeforeLoopback(fst, fst.update)
+ )
+ );
+
+ this.traverse(path);
+ },
+
+ visitDoWhileStatement: function(path) {
+ var dwst = path.node;
+ return b.whileStatement(
+ b.literal(true),
+ insertBeforeLoopback(
+ dwst,
+ b.ifStatement(
+ dwst.test,
+ b.breakStatement()
+ )
+ )
+ );
+ }
+ });
+
+ callback(ast);
+});
+
+function insertBeforeLoopback(loop, toInsert) {
+ var body = loop.body;
+
+ if (!n.Statement.check(toInsert)) {
+ toInsert = b.expressionStatement(toInsert);
+ }
+
+ if (n.BlockStatement.check(body)) {
+ body.body.push(toInsert);
+ } else {
+ body = b.blockStatement([body, toInsert]);
+ loop.body = body;
+ }
+
+ recast.visit(body, {
+ visitContinueStatement: function(path) {
+ var cst = path.node;
+
+ assert.equal(
+ cst.label, null,
+ "Labeled continue statements are not yet supported."
+ );
+
+ path.replace(toInsert, path.node);
+ return false;
+ },
+
+ // Do not descend into nested loops.
+ visitWhileStatement: function() {},
+ visitForStatement: function() {},
+ visitForInStatement: function() {},
+ visitDoWhileStatement: function() {}
+ });
+
+ return body;
+}