summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/node_modules/ast-types/lib/path-visitor.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/node_modules/ast-types/lib/path-visitor.js')
-rw-r--r--deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/node_modules/ast-types/lib/path-visitor.js419
1 files changed, 0 insertions, 419 deletions
diff --git a/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/node_modules/ast-types/lib/path-visitor.js b/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/node_modules/ast-types/lib/path-visitor.js
deleted file mode 100644
index cfe1441d1b..0000000000
--- a/deps/npm/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/node_modules/ast-types/lib/path-visitor.js
+++ /dev/null
@@ -1,419 +0,0 @@
-var types = require("./types");
-var NodePath = require("./node-path");
-var Printable = types.namedTypes.Printable;
-var isArray = types.builtInTypes.array;
-var isObject = types.builtInTypes.object;
-var isFunction = types.builtInTypes.function;
-var hasOwn = Object.prototype.hasOwnProperty;
-var undefined;
-
-function PathVisitor() {
- if (!(this instanceof PathVisitor)) {
- throw new Error(
- "PathVisitor constructor cannot be invoked without 'new'"
- );
- }
-
- // Permanent state.
- this._reusableContextStack = [];
-
- this._methodNameTable = computeMethodNameTable(this);
- this._shouldVisitComments =
- hasOwn.call(this._methodNameTable, "Block") ||
- hasOwn.call(this._methodNameTable, "Line");
-
- this.Context = makeContextConstructor(this);
-
- // State reset every time PathVisitor.prototype.visit is called.
- this._visiting = false;
- this._changeReported = false;
-}
-
-function computeMethodNameTable(visitor) {
- var typeNames = Object.create(null);
-
- for (var methodName in visitor) {
- if (/^visit[A-Z]/.test(methodName)) {
- typeNames[methodName.slice("visit".length)] = true;
- }
- }
-
- var supertypeTable = types.computeSupertypeLookupTable(typeNames);
- var methodNameTable = Object.create(null);
-
- var typeNames = Object.keys(supertypeTable);
- var typeNameCount = typeNames.length;
- for (var i = 0; i < typeNameCount; ++i) {
- var typeName = typeNames[i];
- methodName = "visit" + supertypeTable[typeName];
- if (isFunction.check(visitor[methodName])) {
- methodNameTable[typeName] = methodName;
- }
- }
-
- return methodNameTable;
-}
-
-PathVisitor.fromMethodsObject = function fromMethodsObject(methods) {
- if (methods instanceof PathVisitor) {
- return methods;
- }
-
- if (!isObject.check(methods)) {
- // An empty visitor?
- return new PathVisitor;
- }
-
- function Visitor() {
- if (!(this instanceof Visitor)) {
- throw new Error(
- "Visitor constructor cannot be invoked without 'new'"
- );
- }
- PathVisitor.call(this);
- }
-
- var Vp = Visitor.prototype = Object.create(PVp);
- Vp.constructor = Visitor;
-
- extend(Vp, methods);
- extend(Visitor, PathVisitor);
-
- isFunction.assert(Visitor.fromMethodsObject);
- isFunction.assert(Visitor.visit);
-
- return new Visitor;
-};
-
-function extend(target, source) {
- for (var property in source) {
- if (hasOwn.call(source, property)) {
- target[property] = source[property];
- }
- }
-
- return target;
-}
-
-PathVisitor.visit = function visit(node, methods) {
- return PathVisitor.fromMethodsObject(methods).visit(node);
-};
-
-var PVp = PathVisitor.prototype;
-
-PVp.visit = function() {
- if (this._visiting) {
- throw new Error(
- "Recursively calling visitor.visit(path) resets visitor state. " +
- "Try this.visit(path) or this.traverse(path) instead."
- );
- }
-
- // Private state that needs to be reset before every traversal.
- this._visiting = true;
- this._changeReported = false;
- this._abortRequested = false;
-
- var argc = arguments.length;
- var args = new Array(argc)
- for (var i = 0; i < argc; ++i) {
- args[i] = arguments[i];
- }
-
- if (!(args[0] instanceof NodePath)) {
- args[0] = new NodePath({ root: args[0] }).get("root");
- }
-
- // Called with the same arguments as .visit.
- this.reset.apply(this, args);
-
- try {
- var root = this.visitWithoutReset(args[0]);
- var didNotThrow = true;
- } finally {
- this._visiting = false;
-
- if (!didNotThrow && this._abortRequested) {
- // If this.visitWithoutReset threw an exception and
- // this._abortRequested was set to true, return the root of
- // the AST instead of letting the exception propagate, so that
- // client code does not have to provide a try-catch block to
- // intercept the AbortRequest exception. Other kinds of
- // exceptions will propagate without being intercepted and
- // rethrown by a catch block, so their stacks will accurately
- // reflect the original throwing context.
- return args[0].value;
- }
- }
-
- return root;
-};
-
-PVp.AbortRequest = function AbortRequest() {};
-PVp.abort = function() {
- var visitor = this;
- visitor._abortRequested = true;
- var request = new visitor.AbortRequest();
-
- // If you decide to catch this exception and stop it from propagating,
- // make sure to call its cancel method to avoid silencing other
- // exceptions that might be thrown later in the traversal.
- request.cancel = function() {
- visitor._abortRequested = false;
- };
-
- throw request;
-};
-
-PVp.reset = function(path/*, additional arguments */) {
- // Empty stub; may be reassigned or overridden by subclasses.
-};
-
-PVp.visitWithoutReset = function(path) {
- if (this instanceof this.Context) {
- // Since this.Context.prototype === this, there's a chance we
- // might accidentally call context.visitWithoutReset. If that
- // happens, re-invoke the method against context.visitor.
- return this.visitor.visitWithoutReset(path);
- }
-
- if (!(path instanceof NodePath)) {
- throw new Error("");
- }
-
- var value = path.value;
-
- var methodName = value &&
- typeof value === "object" &&
- typeof value.type === "string" &&
- this._methodNameTable[value.type];
-
- if (methodName) {
- var context = this.acquireContext(path);
- try {
- return context.invokeVisitorMethod(methodName);
- } finally {
- this.releaseContext(context);
- }
-
- } else {
- // If there was no visitor method to call, visit the children of
- // this node generically.
- return visitChildren(path, this);
- }
-};
-
-function visitChildren(path, visitor) {
- if (!(path instanceof NodePath)) {
- throw new Error("");
- }
- if (!(visitor instanceof PathVisitor)) {
- throw new Error("");
- }
-
- var value = path.value;
-
- if (isArray.check(value)) {
- path.each(visitor.visitWithoutReset, visitor);
- } else if (!isObject.check(value)) {
- // No children to visit.
- } else {
- var childNames = types.getFieldNames(value);
-
- // The .comments field of the Node type is hidden, so we only
- // visit it if the visitor defines visitBlock or visitLine, and
- // value.comments is defined.
- if (visitor._shouldVisitComments &&
- value.comments &&
- childNames.indexOf("comments") < 0) {
- childNames.push("comments");
- }
-
- var childCount = childNames.length;
- var childPaths = [];
-
- for (var i = 0; i < childCount; ++i) {
- var childName = childNames[i];
- if (!hasOwn.call(value, childName)) {
- value[childName] = types.getFieldValue(value, childName);
- }
- childPaths.push(path.get(childName));
- }
-
- for (var i = 0; i < childCount; ++i) {
- visitor.visitWithoutReset(childPaths[i]);
- }
- }
-
- return path.value;
-}
-
-PVp.acquireContext = function(path) {
- if (this._reusableContextStack.length === 0) {
- return new this.Context(path);
- }
- return this._reusableContextStack.pop().reset(path);
-};
-
-PVp.releaseContext = function(context) {
- if (!(context instanceof this.Context)) {
- throw new Error("");
- }
- this._reusableContextStack.push(context);
- context.currentPath = null;
-};
-
-PVp.reportChanged = function() {
- this._changeReported = true;
-};
-
-PVp.wasChangeReported = function() {
- return this._changeReported;
-};
-
-function makeContextConstructor(visitor) {
- function Context(path) {
- if (!(this instanceof Context)) {
- throw new Error("");
- }
- if (!(this instanceof PathVisitor)) {
- throw new Error("");
- }
- if (!(path instanceof NodePath)) {
- throw new Error("");
- }
-
- Object.defineProperty(this, "visitor", {
- value: visitor,
- writable: false,
- enumerable: true,
- configurable: false
- });
-
- this.currentPath = path;
- this.needToCallTraverse = true;
-
- Object.seal(this);
- }
-
- if (!(visitor instanceof PathVisitor)) {
- throw new Error("");
- }
-
- // Note that the visitor object is the prototype of Context.prototype,
- // so all visitor methods are inherited by context objects.
- var Cp = Context.prototype = Object.create(visitor);
-
- Cp.constructor = Context;
- extend(Cp, sharedContextProtoMethods);
-
- return Context;
-}
-
-// Every PathVisitor has a different this.Context constructor and
-// this.Context.prototype object, but those prototypes can all use the
-// same reset, invokeVisitorMethod, and traverse function objects.
-var sharedContextProtoMethods = Object.create(null);
-
-sharedContextProtoMethods.reset =
-function reset(path) {
- if (!(this instanceof this.Context)) {
- throw new Error("");
- }
- if (!(path instanceof NodePath)) {
- throw new Error("");
- }
-
- this.currentPath = path;
- this.needToCallTraverse = true;
-
- return this;
-};
-
-sharedContextProtoMethods.invokeVisitorMethod =
-function invokeVisitorMethod(methodName) {
- if (!(this instanceof this.Context)) {
- throw new Error("");
- }
- if (!(this.currentPath instanceof NodePath)) {
- throw new Error("");
- }
-
- var result = this.visitor[methodName].call(this, this.currentPath);
-
- if (result === false) {
- // Visitor methods return false to indicate that they have handled
- // their own traversal needs, and we should not complain if
- // this.needToCallTraverse is still true.
- this.needToCallTraverse = false;
-
- } else if (result !== undefined) {
- // Any other non-undefined value returned from the visitor method
- // is interpreted as a replacement value.
- this.currentPath = this.currentPath.replace(result)[0];
-
- if (this.needToCallTraverse) {
- // If this.traverse still hasn't been called, visit the
- // children of the replacement node.
- this.traverse(this.currentPath);
- }
- }
-
- if (this.needToCallTraverse !== false) {
- throw new Error(
- "Must either call this.traverse or return false in " + methodName
- );
- }
-
- var path = this.currentPath;
- return path && path.value;
-};
-
-sharedContextProtoMethods.traverse =
-function traverse(path, newVisitor) {
- if (!(this instanceof this.Context)) {
- throw new Error("");
- }
- if (!(path instanceof NodePath)) {
- throw new Error("");
- }
- if (!(this.currentPath instanceof NodePath)) {
- throw new Error("");
- }
-
- this.needToCallTraverse = false;
-
- return visitChildren(path, PathVisitor.fromMethodsObject(
- newVisitor || this.visitor
- ));
-};
-
-sharedContextProtoMethods.visit =
-function visit(path, newVisitor) {
- if (!(this instanceof this.Context)) {
- throw new Error("");
- }
- if (!(path instanceof NodePath)) {
- throw new Error("");
- }
- if (!(this.currentPath instanceof NodePath)) {
- throw new Error("");
- }
-
- this.needToCallTraverse = false;
-
- return PathVisitor.fromMethodsObject(
- newVisitor || this.visitor
- ).visitWithoutReset(path);
-};
-
-sharedContextProtoMethods.reportChanged = function reportChanged() {
- this.visitor.reportChanged();
-};
-
-sharedContextProtoMethods.abort = function abort() {
- this.needToCallTraverse = false;
- this.visitor.abort();
-};
-
-module.exports = PathVisitor;