aboutsummaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/lib/parser.js
diff options
context:
space:
mode:
authorRebecca Turner <me@re-becca.org>2016-05-06 15:22:02 -0700
committerJeremiah Senkpiel <fishrock123@rocketmail.com>2016-05-10 14:45:28 -0400
commit5c36cfc8438d28ee5050ee6d5c383cf9c5b895fb (patch)
tree6165b1b2ee92982a1e157ac29c924b516771780d /deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/lib/parser.js
parent101dd1ed789175311ab22f9a32dfc480f127bc68 (diff)
downloadandroid-node-v8-5c36cfc8438d28ee5050ee6d5c383cf9c5b895fb.tar.gz
android-node-v8-5c36cfc8438d28ee5050ee6d5c383cf9c5b895fb.tar.bz2
android-node-v8-5c36cfc8438d28ee5050ee6d5c383cf9c5b895fb.zip
deps: upgrade npm to 3.8.9
Contains the following three npm releases: https://github.com/npm/npm/releases/tag/v3.8.7 https://github.com/npm/npm/releases/tag/v3.8.8 https://github.com/npm/npm/releases/tag/v3.8.9 PR-URL: https://github.com/nodejs/node/pull/6664 Reviewed-By: Myles Borins <myles.borins@gmail.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Diffstat (limited to 'deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/lib/parser.js')
-rw-r--r--deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/lib/parser.js152
1 files changed, 152 insertions, 0 deletions
diff --git a/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/lib/parser.js b/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/lib/parser.js
new file mode 100644
index 0000000000..fa2fef9772
--- /dev/null
+++ b/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/lib/parser.js
@@ -0,0 +1,152 @@
+var assert = require("assert");
+var types = require("./types");
+var n = types.namedTypes;
+var b = types.builders;
+var isObject = types.builtInTypes.object;
+var isArray = types.builtInTypes.array;
+var isFunction = types.builtInTypes.function;
+var Patcher = require("./patcher").Patcher;
+var normalizeOptions = require("./options").normalize;
+var fromString = require("./lines").fromString;
+var attachComments = require("./comments").attach;
+var util = require("./util");
+
+exports.parse = function parse(source, options) {
+ options = normalizeOptions(options);
+
+ var lines = fromString(source, options);
+
+ var sourceWithoutTabs = lines.toString({
+ tabWidth: options.tabWidth,
+ reuseWhitespace: false,
+ useTabs: false
+ });
+
+ var comments = [];
+ var program = options.parser.parse(sourceWithoutTabs, {
+ loc: true,
+ locations: true,
+ range: options.range,
+ comment: true,
+ onComment: comments,
+ tolerant: options.tolerant,
+ ecmaVersion: 6,
+ sourceType: 'module'
+ });
+
+ // If the source was empty, some parsers give loc.{start,end}.line
+ // values of 0, instead of the minimum of 1.
+ util.fixFaultyLocations(program, lines);
+
+ program.loc = program.loc || {
+ start: lines.firstPos(),
+ end: lines.lastPos()
+ };
+
+ program.loc.lines = lines;
+ program.loc.indent = 0;
+
+ // Expand the Program node's .loc to include all comments, since
+ // typically its .loc.start and .loc.end will coincide with those of
+ // the first and last statements, respectively, excluding any comments
+ // that fall outside that region.
+ var trueProgramLoc = util.getTrueLoc(program, lines);
+ program.loc.start = trueProgramLoc.start;
+ program.loc.end = trueProgramLoc.end;
+
+ if (program.comments) {
+ comments = program.comments;
+ delete program.comments;
+ }
+
+ // In order to ensure we reprint leading and trailing program
+ // comments, wrap the original Program node with a File node.
+ var file = program;
+ if (file.type === "Program") {
+ var file = b.file(program);
+ file.loc = {
+ lines: lines,
+ indent: 0,
+ start: lines.firstPos(),
+ end: lines.lastPos()
+ };
+ } else if (file.type === "File") {
+ program = file.program;
+ }
+
+ // Passing file.program here instead of just file means that initial
+ // comments will be attached to program.body[0] instead of program.
+ attachComments(
+ comments,
+ program.body.length ? file.program : file,
+ lines
+ );
+
+ // Return a copy of the original AST so that any changes made may be
+ // compared to the original.
+ return new TreeCopier(lines).copy(file);
+};
+
+function TreeCopier(lines) {
+ assert.ok(this instanceof TreeCopier);
+ this.lines = lines;
+ this.indent = 0;
+}
+
+var TCp = TreeCopier.prototype;
+
+TCp.copy = function(node) {
+ if (isArray.check(node)) {
+ return node.map(this.copy, this);
+ }
+
+ if (!isObject.check(node)) {
+ return node;
+ }
+
+ util.fixFaultyLocations(node, this.lines);
+
+ var copy = Object.create(Object.getPrototypeOf(node), {
+ original: { // Provide a link from the copy to the original.
+ value: node,
+ configurable: false,
+ enumerable: false,
+ writable: true
+ }
+ });
+
+ var loc = node.loc;
+ var oldIndent = this.indent;
+ var newIndent = oldIndent;
+
+ if (loc) {
+ // When node is a comment, we set node.loc.indent to
+ // node.loc.start.column so that, when/if we print the comment by
+ // itself, we can strip that much whitespace from the left margin
+ // of the comment. This only really matters for multiline Block
+ // comments, but it doesn't hurt for Line comments.
+ if (node.type === "Block" || node.type === "Line" ||
+ node.type === "CommentBlock" || node.type === "CommentLine" ||
+ this.lines.isPrecededOnlyByWhitespace(loc.start)) {
+ newIndent = this.indent = loc.start.column;
+ }
+
+ loc.lines = this.lines;
+ loc.indent = newIndent;
+ }
+
+ var keys = Object.keys(node);
+ var keyCount = keys.length;
+ for (var i = 0; i < keyCount; ++i) {
+ var key = keys[i];
+ if (key === "loc") {
+ copy[key] = node[key];
+ } else {
+ copy[key] = this.copy(node[key]);
+ }
+ }
+
+ this.indent = oldIndent;
+
+ return copy;
+};