regenerator-transform
Advanced tools
Comparing version 0.11.1 to 0.12.0
@@ -7,6 +7,2 @@ "use strict"; | ||
var _babelTypes = require("babel-types"); | ||
var t = _interopRequireWildcard(_babelTypes); | ||
var _leap = require("./leap"); | ||
@@ -28,16 +24,19 @@ | ||
var hasOwn = Object.prototype.hasOwnProperty; /** | ||
* Copyright (c) 2014, Facebook, Inc. | ||
* All rights reserved. | ||
* | ||
* This source code is licensed under the BSD-style license found in the | ||
* https://raw.github.com/facebook/regenerator/master/LICENSE file. An | ||
* additional grant of patent rights can be found in the PATENTS file in | ||
* the same directory. | ||
*/ | ||
/** | ||
* Copyright (c) 2014, Facebook, Inc. | ||
* All rights reserved. | ||
* | ||
* This source code is licensed under the BSD-style license found in the | ||
* https://raw.github.com/facebook/regenerator/master/LICENSE file. An | ||
* additional grant of patent rights can be found in the PATENTS file in | ||
* the same directory. | ||
*/ | ||
var hasOwn = Object.prototype.hasOwnProperty; | ||
function Emitter(contextId) { | ||
_assert2.default.ok(this instanceof Emitter); | ||
t.assertIdentifier(contextId); | ||
util.getTypes().assertIdentifier(contextId); | ||
// Used to generate unique temporary names. | ||
@@ -82,3 +81,3 @@ this.nextTempId = 0; | ||
function loc() { | ||
return t.numericLiteral(-1); | ||
return util.getTypes().numericLiteral(-1); | ||
} | ||
@@ -89,3 +88,3 @@ | ||
Ep.mark = function (loc) { | ||
t.assertLiteral(loc); | ||
util.getTypes().assertLiteral(loc); | ||
var index = this.listing.length; | ||
@@ -104,2 +103,4 @@ if (loc.value === -1) { | ||
Ep.emit = function (node) { | ||
var t = util.getTypes(); | ||
if (t.isExpression(node)) { | ||
@@ -122,2 +123,3 @@ node = t.expressionStatement(node); | ||
Ep.assign = function (lhs, rhs) { | ||
var t = util.getTypes(); | ||
return t.expressionStatement(t.assignmentExpression("=", lhs, rhs)); | ||
@@ -129,2 +131,3 @@ }; | ||
Ep.contextProperty = function (name, computed) { | ||
var t = util.getTypes(); | ||
return t.memberExpression(this.contextId, computed ? t.stringLiteral(name) : t.identifier(name), !!computed); | ||
@@ -143,3 +146,3 @@ }; | ||
Ep.setReturnValue = function (valuePath) { | ||
t.assertExpression(valuePath.value); | ||
util.getTypes().assertExpression(valuePath.value); | ||
@@ -150,2 +153,4 @@ this.emitAssign(this.contextProperty("rval"), this.explodeExpression(valuePath)); | ||
Ep.clearPendingException = function (tryLoc, assignee) { | ||
var t = util.getTypes(); | ||
t.assertLiteral(tryLoc); | ||
@@ -166,3 +171,3 @@ | ||
this.emitAssign(this.contextProperty("next"), toLoc); | ||
this.emit(t.breakStatement()); | ||
this.emit(util.getTypes().breakStatement()); | ||
}; | ||
@@ -172,2 +177,4 @@ | ||
Ep.jumpIf = function (test, toLoc) { | ||
var t = util.getTypes(); | ||
t.assertExpression(test); | ||
@@ -181,2 +188,4 @@ t.assertLiteral(toLoc); | ||
Ep.jumpIfNot = function (test, toLoc) { | ||
var t = util.getTypes(); | ||
t.assertExpression(test); | ||
@@ -206,2 +215,4 @@ t.assertLiteral(toLoc); | ||
Ep.getContextFunction = function (id) { | ||
var t = util.getTypes(); | ||
return t.functionExpression(id || null /*Anonymous*/ | ||
@@ -226,2 +237,3 @@ , [this.contextId], t.blockStatement([this.getDispatchLoop()]), false, // Not a generator anymore! | ||
var self = this; | ||
var t = util.getTypes(); | ||
var cases = []; | ||
@@ -270,2 +282,3 @@ var current = void 0; | ||
var t = util.getTypes(); | ||
var lastLocValue = 0; | ||
@@ -302,2 +315,3 @@ | ||
Ep.explode = function (path, ignoreResult) { | ||
var t = util.getTypes(); | ||
var node = path.node; | ||
@@ -338,2 +352,3 @@ var self = this; | ||
Ep.explodeStatement = function (path, labelId) { | ||
var t = util.getTypes(); | ||
var stmt = path.node; | ||
@@ -688,2 +703,3 @@ var self = this; | ||
var t = util.getTypes(); | ||
var abruptArgs = [t.stringLiteral(record.type)]; | ||
@@ -712,3 +728,3 @@ | ||
if (type === "break" || type === "continue") { | ||
return !hasOwn.call(record, "value") && t.isLiteral(record.target); | ||
return !hasOwn.call(record, "value") && util.getTypes().isLiteral(record.target); | ||
} | ||
@@ -733,3 +749,3 @@ | ||
Ep.getUnmarkedCurrentLoc = function () { | ||
return t.numericLiteral(this.listing.length); | ||
return util.getTypes().numericLiteral(this.listing.length); | ||
}; | ||
@@ -749,3 +765,3 @@ | ||
if (loc) { | ||
t.assertLiteral(loc); | ||
util.getTypes().assertLiteral(loc); | ||
@@ -771,2 +787,3 @@ if (loc.value === -1) { | ||
Ep.explodeExpression = function (path, ignoreResult) { | ||
var t = util.getTypes(); | ||
var expr = path.node; | ||
@@ -773,0 +790,0 @@ if (expr) { |
"use strict"; | ||
var _babelTypes = require("babel-types"); | ||
var t = _interopRequireWildcard(_babelTypes); | ||
var _util = require("./util"); | ||
@@ -13,2 +9,8 @@ | ||
var hasOwn = Object.prototype.hasOwnProperty; | ||
// The hoist function takes a FunctionExpression or FunctionDeclaration | ||
// and replaces any Declaration nodes in its body with assignments, then | ||
// returns a VariableDeclaration containing just the names of the removed | ||
// declarations. | ||
/** | ||
@@ -24,9 +26,4 @@ * Copyright (c) 2014, Facebook, Inc. | ||
var hasOwn = Object.prototype.hasOwnProperty; | ||
// The hoist function takes a FunctionExpression or FunctionDeclaration | ||
// and replaces any Declaration nodes in its body with assignments, then | ||
// returns a VariableDeclaration containing just the names of the removed | ||
// declarations. | ||
exports.hoist = function (funPath) { | ||
var t = util.getTypes(); | ||
t.assertFunction(funPath.node); | ||
@@ -120,2 +117,7 @@ | ||
path.skip(); | ||
}, | ||
ArrowFunctionExpression: function ArrowFunctionExpression(path) { | ||
// Don't descend into nested function expressions. | ||
path.skip(); | ||
} | ||
@@ -122,0 +124,0 @@ }); |
@@ -7,3 +7,3 @@ "use strict"; | ||
var plugin = { | ||
visitor: require("./visit").visitor | ||
visitor: require("./visit").getVisitor(context) | ||
}; | ||
@@ -10,0 +10,0 @@ |
@@ -7,9 +7,5 @@ "use strict"; | ||
var _babelTypes = require("babel-types"); | ||
var t = _interopRequireWildcard(_babelTypes); | ||
var _util = require("util"); | ||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } | ||
var _util2 = require("./util.js"); | ||
@@ -32,3 +28,3 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
Entry.call(this); | ||
t.assertLiteral(returnLoc); | ||
(0, _util2.getTypes)().assertLiteral(returnLoc); | ||
this.returnLoc = returnLoc; | ||
@@ -43,2 +39,4 @@ } | ||
var t = (0, _util2.getTypes)(); | ||
t.assertLiteral(breakLoc); | ||
@@ -63,3 +61,3 @@ t.assertLiteral(continueLoc); | ||
Entry.call(this); | ||
t.assertLiteral(breakLoc); | ||
(0, _util2.getTypes)().assertLiteral(breakLoc); | ||
this.breakLoc = breakLoc; | ||
@@ -74,2 +72,3 @@ } | ||
var t = (0, _util2.getTypes)(); | ||
t.assertLiteral(firstLoc); | ||
@@ -103,2 +102,4 @@ | ||
var t = (0, _util2.getTypes)(); | ||
t.assertLiteral(firstLoc); | ||
@@ -116,2 +117,3 @@ t.assertIdentifier(paramId); | ||
Entry.call(this); | ||
var t = (0, _util2.getTypes)(); | ||
t.assertLiteral(firstLoc); | ||
@@ -129,2 +131,4 @@ t.assertLiteral(afterLoc); | ||
var t = (0, _util2.getTypes)(); | ||
t.assertLiteral(breakLoc); | ||
@@ -131,0 +135,0 @@ t.assertIdentifier(label); |
@@ -7,20 +7,17 @@ "use strict"; | ||
var _babelTypes = require("babel-types"); | ||
var _util = require("./util.js"); | ||
var t = _interopRequireWildcard(_babelTypes); | ||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var m = require("private").makeAccessor(); /** | ||
* Copyright (c) 2014, Facebook, Inc. | ||
* All rights reserved. | ||
* | ||
* This source code is licensed under the BSD-style license found in the | ||
* https://raw.github.com/facebook/regenerator/master/LICENSE file. An | ||
* additional grant of patent rights can be found in the PATENTS file in | ||
* the same directory. | ||
*/ | ||
/** | ||
* Copyright (c) 2014, Facebook, Inc. | ||
* All rights reserved. | ||
* | ||
* This source code is licensed under the BSD-style license found in the | ||
* https://raw.github.com/facebook/regenerator/master/LICENSE file. An | ||
* additional grant of patent rights can be found in the PATENTS file in | ||
* the same directory. | ||
*/ | ||
var m = require("private").makeAccessor(); | ||
var hasOwn = Object.prototype.hasOwnProperty; | ||
@@ -30,2 +27,3 @@ | ||
function onlyChildren(node) { | ||
var t = (0, _util.getTypes)(); | ||
t.assertNode(node); | ||
@@ -61,3 +59,3 @@ | ||
function predicate(node) { | ||
t.assertNode(node); | ||
(0, _util.getTypes)().assertNode(node); | ||
@@ -64,0 +62,0 @@ var meta = m(node); |
@@ -6,6 +6,2 @@ "use strict"; | ||
var _babelTypes = require("babel-types"); | ||
var t = _interopRequireWildcard(_babelTypes); | ||
var _util = require("./util"); | ||
@@ -46,2 +42,4 @@ | ||
function replaceShorthandObjectMethod(path) { | ||
var t = util.getTypes(); | ||
if (!path.node || !t.isFunction(path.node)) { | ||
@@ -48,0 +46,0 @@ throw new Error("replaceShorthandObjectMethod can only be called on Function AST node paths."); |
"use strict"; | ||
exports.__esModule = true; | ||
exports.wrapWithTypes = wrapWithTypes; | ||
exports.getTypes = getTypes; | ||
exports.runtimeProperty = runtimeProperty; | ||
exports.isReference = isReference; | ||
exports.replaceWithOrRemove = replaceWithOrRemove; | ||
/** | ||
* Copyright (c) 2014, Facebook, Inc. | ||
* All rights reserved. | ||
* | ||
* This source code is licensed under the BSD-style license found in the | ||
* https://raw.github.com/facebook/regenerator/master/LICENSE file. An | ||
* additional grant of patent rights can be found in the PATENTS file in | ||
* the same directory. | ||
*/ | ||
var _babelTypes = require("babel-types"); | ||
var currentTypes = null; | ||
var t = _interopRequireWildcard(_babelTypes); | ||
function wrapWithTypes(types, fn) { | ||
return function () { | ||
var oldTypes = currentTypes; | ||
currentTypes = types; | ||
try { | ||
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { | ||
args[_key] = arguments[_key]; | ||
} | ||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } | ||
return fn.apply(this, args); | ||
} finally { | ||
currentTypes = oldTypes; | ||
} | ||
}; | ||
} | ||
function getTypes() { | ||
return currentTypes; | ||
} | ||
function runtimeProperty(name) { | ||
var t = getTypes(); | ||
return t.memberExpression(t.identifier("regeneratorRuntime"), t.identifier(name), false); | ||
} /** | ||
* Copyright (c) 2014, Facebook, Inc. | ||
* All rights reserved. | ||
* | ||
* This source code is licensed under the BSD-style license found in the | ||
* https://raw.github.com/facebook/regenerator/master/LICENSE file. An | ||
* additional grant of patent rights can be found in the PATENTS file in | ||
* the same directory. | ||
*/ | ||
} | ||
@@ -26,0 +46,0 @@ function isReference(path) { |
228
lib/visit.js
@@ -17,6 +17,2 @@ /** | ||
var _babelTypes = require("babel-types"); | ||
var t = _interopRequireWildcard(_babelTypes); | ||
var _hoist = require("./hoist"); | ||
@@ -38,136 +34,139 @@ | ||
exports.visitor = { | ||
Function: { | ||
exit: function exit(path, state) { | ||
var node = path.node; | ||
exports.getVisitor = function (_ref) { | ||
var t = _ref.types; | ||
return { | ||
Function: { | ||
exit: util.wrapWithTypes(t, function (path, state) { | ||
var node = path.node; | ||
if (node.generator) { | ||
if (node.async) { | ||
// Async generator | ||
if (state.opts.asyncGenerators === false) return; | ||
if (node.generator) { | ||
if (node.async) { | ||
// Async generator | ||
if (state.opts.asyncGenerators === false) return; | ||
} else { | ||
// Plain generator | ||
if (state.opts.generators === false) return; | ||
} | ||
} else if (node.async) { | ||
// Async function | ||
if (state.opts.async === false) return; | ||
} else { | ||
// Plain generator | ||
if (state.opts.generators === false) return; | ||
// Not a generator or async function. | ||
return; | ||
} | ||
} else if (node.async) { | ||
// Async function | ||
if (state.opts.async === false) return; | ||
} else { | ||
// Not a generator or async function. | ||
return; | ||
} | ||
// if this is an ObjectMethod, we need to convert it to an ObjectProperty | ||
path = (0, _replaceShorthandObjectMethod2.default)(path); | ||
node = path.node; | ||
// if this is an ObjectMethod, we need to convert it to an ObjectProperty | ||
path = (0, _replaceShorthandObjectMethod2.default)(path); | ||
node = path.node; | ||
var contextId = path.scope.generateUidIdentifier("context"); | ||
var argsId = path.scope.generateUidIdentifier("args"); | ||
var contextId = path.scope.generateUidIdentifier("context"); | ||
var argsId = path.scope.generateUidIdentifier("args"); | ||
path.ensureBlock(); | ||
var bodyBlockPath = path.get("body"); | ||
path.ensureBlock(); | ||
var bodyBlockPath = path.get("body"); | ||
if (node.async) { | ||
bodyBlockPath.traverse(awaitVisitor); | ||
} | ||
if (node.async) { | ||
bodyBlockPath.traverse(awaitVisitor); | ||
} | ||
bodyBlockPath.traverse(functionSentVisitor, { | ||
context: contextId | ||
}); | ||
bodyBlockPath.traverse(functionSentVisitor, { | ||
context: contextId | ||
}); | ||
var outerBody = []; | ||
var innerBody = []; | ||
var outerBody = []; | ||
var innerBody = []; | ||
bodyBlockPath.get("body").forEach(function (childPath) { | ||
var node = childPath.node; | ||
if (t.isExpressionStatement(node) && t.isStringLiteral(node.expression)) { | ||
// Babylon represents directives like "use strict" as elements | ||
// of a bodyBlockPath.node.directives array, but they could just | ||
// as easily be represented (by other parsers) as traditional | ||
// string-literal-valued expression statements, so we need to | ||
// handle that here. (#248) | ||
outerBody.push(node); | ||
} else if (node && node._blockHoist != null) { | ||
outerBody.push(node); | ||
} else { | ||
innerBody.push(node); | ||
bodyBlockPath.get("body").forEach(function (childPath) { | ||
var node = childPath.node; | ||
if (t.isExpressionStatement(node) && t.isStringLiteral(node.expression)) { | ||
// Babylon represents directives like "use strict" as elements | ||
// of a bodyBlockPath.node.directives array, but they could just | ||
// as easily be represented (by other parsers) as traditional | ||
// string-literal-valued expression statements, so we need to | ||
// handle that here. (#248) | ||
outerBody.push(node); | ||
} else if (node && node._blockHoist != null) { | ||
outerBody.push(node); | ||
} else { | ||
innerBody.push(node); | ||
} | ||
}); | ||
if (outerBody.length > 0) { | ||
// Only replace the inner body if we actually hoisted any statements | ||
// to the outer body. | ||
bodyBlockPath.node.body = innerBody; | ||
} | ||
}); | ||
if (outerBody.length > 0) { | ||
// Only replace the inner body if we actually hoisted any statements | ||
// to the outer body. | ||
bodyBlockPath.node.body = innerBody; | ||
} | ||
var outerFnExpr = getOuterFnExpr(path); | ||
// Note that getOuterFnExpr has the side-effect of ensuring that the | ||
// function has a name (so node.id will always be an Identifier), even | ||
// if a temporary name has to be synthesized. | ||
t.assertIdentifier(node.id); | ||
var innerFnId = t.identifier(node.id.name + "$"); | ||
var outerFnExpr = getOuterFnExpr(path); | ||
// Note that getOuterFnExpr has the side-effect of ensuring that the | ||
// function has a name (so node.id will always be an Identifier), even | ||
// if a temporary name has to be synthesized. | ||
t.assertIdentifier(node.id); | ||
var innerFnId = t.identifier(node.id.name + "$"); | ||
// Turn all declarations into vars, and replace the original | ||
// declarations with equivalent assignment expressions. | ||
var vars = (0, _hoist.hoist)(path); | ||
// Turn all declarations into vars, and replace the original | ||
// declarations with equivalent assignment expressions. | ||
var vars = (0, _hoist.hoist)(path); | ||
var didRenameArguments = renameArguments(path, argsId); | ||
if (didRenameArguments) { | ||
vars = vars || t.variableDeclaration("var", []); | ||
var argumentIdentifier = t.identifier("arguments"); | ||
// we need to do this as otherwise arguments in arrow functions gets hoisted | ||
argumentIdentifier._shadowedFunctionLiteral = path; | ||
vars.declarations.push(t.variableDeclarator(argsId, argumentIdentifier)); | ||
} | ||
var didRenameArguments = renameArguments(path, argsId); | ||
if (didRenameArguments) { | ||
vars = vars || t.variableDeclaration("var", []); | ||
var argumentIdentifier = t.identifier("arguments"); | ||
// we need to do this as otherwise arguments in arrow functions gets hoisted | ||
argumentIdentifier._shadowedFunctionLiteral = path; | ||
vars.declarations.push(t.variableDeclarator(argsId, argumentIdentifier)); | ||
} | ||
var emitter = new _emit.Emitter(contextId); | ||
emitter.explode(path.get("body")); | ||
var emitter = new _emit.Emitter(contextId); | ||
emitter.explode(path.get("body")); | ||
if (vars && vars.declarations.length > 0) { | ||
outerBody.push(vars); | ||
} | ||
if (vars && vars.declarations.length > 0) { | ||
outerBody.push(vars); | ||
} | ||
var wrapArgs = [emitter.getContextFunction(innerFnId), | ||
// Async functions that are not generators don't care about the | ||
// outer function because they don't need it to be marked and don't | ||
// inherit from its .prototype. | ||
node.generator ? outerFnExpr : t.nullLiteral(), t.thisExpression()]; | ||
var wrapArgs = [emitter.getContextFunction(innerFnId), | ||
// Async functions that are not generators don't care about the | ||
// outer function because they don't need it to be marked and don't | ||
// inherit from its .prototype. | ||
node.generator ? outerFnExpr : t.nullLiteral(), t.thisExpression()]; | ||
var tryLocsList = emitter.getTryLocsList(); | ||
if (tryLocsList) { | ||
wrapArgs.push(tryLocsList); | ||
} | ||
var tryLocsList = emitter.getTryLocsList(); | ||
if (tryLocsList) { | ||
wrapArgs.push(tryLocsList); | ||
} | ||
var wrapCall = t.callExpression(util.runtimeProperty(node.async ? "async" : "wrap"), wrapArgs); | ||
var wrapCall = t.callExpression(util.runtimeProperty(node.async ? "async" : "wrap"), wrapArgs); | ||
outerBody.push(t.returnStatement(wrapCall)); | ||
node.body = t.blockStatement(outerBody); | ||
outerBody.push(t.returnStatement(wrapCall)); | ||
node.body = t.blockStatement(outerBody); | ||
var oldDirectives = bodyBlockPath.node.directives; | ||
if (oldDirectives) { | ||
// Babylon represents directives like "use strict" as elements of | ||
// a bodyBlockPath.node.directives array. (#248) | ||
node.body.directives = oldDirectives; | ||
} | ||
var oldDirectives = bodyBlockPath.node.directives; | ||
if (oldDirectives) { | ||
// Babylon represents directives like "use strict" as elements of | ||
// a bodyBlockPath.node.directives array. (#248) | ||
node.body.directives = oldDirectives; | ||
} | ||
var wasGeneratorFunction = node.generator; | ||
if (wasGeneratorFunction) { | ||
node.generator = false; | ||
} | ||
var wasGeneratorFunction = node.generator; | ||
if (wasGeneratorFunction) { | ||
node.generator = false; | ||
} | ||
if (node.async) { | ||
node.async = false; | ||
} | ||
if (node.async) { | ||
node.async = false; | ||
} | ||
if (wasGeneratorFunction && t.isExpression(node)) { | ||
util.replaceWithOrRemove(path, t.callExpression(util.runtimeProperty("mark"), [node])); | ||
path.addComment("leading", "#__PURE__"); | ||
} | ||
if (wasGeneratorFunction && t.isExpression(node)) { | ||
util.replaceWithOrRemove(path, t.callExpression(util.runtimeProperty("mark"), [node])); | ||
path.addComment("leading", "#__PURE__"); | ||
} | ||
// Generators are processed in 'exit' handlers so that regenerator only has to run on | ||
// an ES5 AST, but that means traversal will not pick up newly inserted references | ||
// to things like 'regeneratorRuntime'. To avoid this, we explicitly requeue. | ||
path.requeue(); | ||
// Generators are processed in 'exit' handlers so that regenerator only has to run on | ||
// an ES5 AST, but that means traversal will not pick up newly inserted references | ||
// to things like 'regeneratorRuntime'. To avoid this, we explicitly requeue. | ||
path.requeue(); | ||
}) | ||
} | ||
} | ||
}; | ||
}; | ||
@@ -180,2 +179,3 @@ | ||
function getOuterFnExpr(funPath) { | ||
var t = util.getTypes(); | ||
var node = funPath.node; | ||
@@ -202,2 +202,3 @@ t.assertFunction(node); | ||
function getMarkedFunctionId(funPath) { | ||
var t = util.getTypes(); | ||
var node = funPath.node; | ||
@@ -275,2 +276,3 @@ t.assertIdentifier(node.id); | ||
if (node.meta.name === "function" && node.property.name === "sent") { | ||
var t = util.getTypes(); | ||
util.replaceWithOrRemove(path, t.memberExpression(this.context, t.identifier("_sent"))); | ||
@@ -287,2 +289,4 @@ } | ||
AwaitExpression: function AwaitExpression(path) { | ||
var t = util.getTypes(); | ||
// Convert await expressions to yield expressions. | ||
@@ -289,0 +293,0 @@ var argument = path.node.argument; |
@@ -5,3 +5,3 @@ { | ||
"description": "Explode async and generator functions into a state machine.", | ||
"version": "0.11.1", | ||
"version": "0.12.0", | ||
"main": "lib/index.js", | ||
@@ -33,3 +33,2 @@ "keywords": [ | ||
"dependencies": { | ||
"babel-types": "7.0.0-beta.3", | ||
"private": "^0.1.6" | ||
@@ -36,0 +35,0 @@ }, |
@@ -12,3 +12,2 @@ /** | ||
import assert from "assert"; | ||
import * as t from "babel-types"; | ||
import * as leap from "./leap"; | ||
@@ -22,4 +21,5 @@ import * as meta from "./meta"; | ||
assert.ok(this instanceof Emitter); | ||
t.assertIdentifier(contextId); | ||
util.getTypes().assertIdentifier(contextId); | ||
// Used to generate unique temporary names. | ||
@@ -64,3 +64,3 @@ this.nextTempId = 0; | ||
function loc() { | ||
return t.numericLiteral(-1); | ||
return util.getTypes().numericLiteral(-1); | ||
} | ||
@@ -71,3 +71,3 @@ | ||
Ep.mark = function(loc) { | ||
t.assertLiteral(loc); | ||
util.getTypes().assertLiteral(loc); | ||
let index = this.listing.length; | ||
@@ -86,2 +86,4 @@ if (loc.value === -1) { | ||
Ep.emit = function(node) { | ||
const t = util.getTypes(); | ||
if (t.isExpression(node)) { | ||
@@ -104,2 +106,3 @@ node = t.expressionStatement(node); | ||
Ep.assign = function(lhs, rhs) { | ||
const t = util.getTypes(); | ||
return t.expressionStatement( | ||
@@ -112,2 +115,3 @@ t.assignmentExpression("=", lhs, rhs)); | ||
Ep.contextProperty = function(name, computed) { | ||
const t = util.getTypes(); | ||
return t.memberExpression( | ||
@@ -130,3 +134,3 @@ this.contextId, | ||
Ep.setReturnValue = function(valuePath) { | ||
t.assertExpression(valuePath.value); | ||
util.getTypes().assertExpression(valuePath.value); | ||
@@ -140,2 +144,4 @@ this.emitAssign( | ||
Ep.clearPendingException = function(tryLoc, assignee) { | ||
const t = util.getTypes(); | ||
t.assertLiteral(tryLoc); | ||
@@ -159,3 +165,3 @@ | ||
this.emitAssign(this.contextProperty("next"), toLoc); | ||
this.emit(t.breakStatement()); | ||
this.emit(util.getTypes().breakStatement()); | ||
}; | ||
@@ -165,2 +171,4 @@ | ||
Ep.jumpIf = function(test, toLoc) { | ||
const t = util.getTypes(); | ||
t.assertExpression(test); | ||
@@ -180,2 +188,4 @@ t.assertLiteral(toLoc); | ||
Ep.jumpIfNot = function(test, toLoc) { | ||
const t = util.getTypes(); | ||
t.assertExpression(test); | ||
@@ -212,2 +222,4 @@ t.assertLiteral(toLoc); | ||
Ep.getContextFunction = function(id) { | ||
const t = util.getTypes(); | ||
return t.functionExpression( | ||
@@ -234,3 +246,4 @@ id || null/*Anonymous*/, | ||
Ep.getDispatchLoop = function() { | ||
let self = this; | ||
const self = this; | ||
const t = util.getTypes(); | ||
let cases = []; | ||
@@ -297,2 +310,3 @@ let current; | ||
const t = util.getTypes(); | ||
let lastLocValue = 0; | ||
@@ -333,2 +347,3 @@ | ||
Ep.explode = function(path, ignoreResult) { | ||
const t = util.getTypes(); | ||
let node = path.node; | ||
@@ -381,2 +396,3 @@ let self = this; | ||
Ep.explodeStatement = function(path, labelId) { | ||
const t = util.getTypes(); | ||
let stmt = path.node; | ||
@@ -796,2 +812,3 @@ let self = this; | ||
const t = util.getTypes(); | ||
let abruptArgs = [t.stringLiteral(record.type)]; | ||
@@ -831,3 +848,3 @@ | ||
return !hasOwn.call(record, "value") | ||
&& t.isLiteral(record.target); | ||
&& util.getTypes().isLiteral(record.target); | ||
} | ||
@@ -855,3 +872,3 @@ | ||
Ep.getUnmarkedCurrentLoc = function() { | ||
return t.numericLiteral(this.listing.length); | ||
return util.getTypes().numericLiteral(this.listing.length); | ||
}; | ||
@@ -871,3 +888,3 @@ | ||
if (loc) { | ||
t.assertLiteral(loc); | ||
util.getTypes().assertLiteral(loc); | ||
@@ -894,2 +911,3 @@ if (loc.value === -1) { | ||
Ep.explodeExpression = function(path, ignoreResult) { | ||
const t = util.getTypes(); | ||
let expr = path.node; | ||
@@ -896,0 +914,0 @@ if (expr) { |
@@ -11,3 +11,2 @@ /** | ||
import * as t from "babel-types"; | ||
import * as util from "./util"; | ||
@@ -21,2 +20,3 @@ let hasOwn = Object.prototype.hasOwnProperty; | ||
exports.hoist = function(funPath) { | ||
const t = util.getTypes(); | ||
t.assertFunction(funPath.node); | ||
@@ -126,2 +126,7 @@ | ||
path.skip(); | ||
}, | ||
ArrowFunctionExpression: function(path) { | ||
// Don't descend into nested function expressions. | ||
path.skip(); | ||
} | ||
@@ -128,0 +133,0 @@ }); |
@@ -13,3 +13,3 @@ /** | ||
const plugin = { | ||
visitor: require("./visit").visitor, | ||
visitor: require("./visit").getVisitor(context), | ||
}; | ||
@@ -16,0 +16,0 @@ |
@@ -12,4 +12,4 @@ /** | ||
import assert from "assert"; | ||
import * as t from "babel-types"; | ||
import { inherits } from "util"; | ||
import { getTypes } from "./util.js"; | ||
@@ -22,3 +22,3 @@ function Entry() { | ||
Entry.call(this); | ||
t.assertLiteral(returnLoc); | ||
getTypes().assertLiteral(returnLoc); | ||
this.returnLoc = returnLoc; | ||
@@ -33,2 +33,4 @@ } | ||
const t = getTypes(); | ||
t.assertLiteral(breakLoc); | ||
@@ -53,3 +55,3 @@ t.assertLiteral(continueLoc); | ||
Entry.call(this); | ||
t.assertLiteral(breakLoc); | ||
getTypes().assertLiteral(breakLoc); | ||
this.breakLoc = breakLoc; | ||
@@ -64,2 +66,3 @@ } | ||
const t = getTypes(); | ||
t.assertLiteral(firstLoc); | ||
@@ -93,2 +96,4 @@ | ||
const t = getTypes(); | ||
t.assertLiteral(firstLoc); | ||
@@ -106,2 +111,3 @@ t.assertIdentifier(paramId); | ||
Entry.call(this); | ||
const t = getTypes(); | ||
t.assertLiteral(firstLoc); | ||
@@ -119,2 +125,4 @@ t.assertLiteral(afterLoc); | ||
const t = getTypes(); | ||
t.assertLiteral(breakLoc); | ||
@@ -121,0 +129,0 @@ t.assertIdentifier(label); |
@@ -12,4 +12,4 @@ /** | ||
import assert from "assert"; | ||
import { getTypes } from "./util.js"; | ||
let m = require("private").makeAccessor(); | ||
import * as t from "babel-types"; | ||
let hasOwn = Object.prototype.hasOwnProperty; | ||
@@ -19,2 +19,3 @@ | ||
function onlyChildren(node) { | ||
const t = getTypes(); | ||
t.assertNode(node); | ||
@@ -50,3 +51,3 @@ | ||
function predicate(node) { | ||
t.assertNode(node); | ||
getTypes().assertNode(node); | ||
@@ -53,0 +54,0 @@ let meta = m(node); |
@@ -1,2 +0,1 @@ | ||
import * as t from "babel-types"; | ||
import * as util from "./util"; | ||
@@ -33,2 +32,4 @@ | ||
export default function replaceShorthandObjectMethod(path) { | ||
const t = util.getTypes(); | ||
if (!path.node || !t.isFunction(path.node)) { | ||
@@ -35,0 +36,0 @@ throw new Error("replaceShorthandObjectMethod can only be called on Function AST node paths."); |
@@ -11,5 +11,22 @@ /** | ||
import * as t from "babel-types"; | ||
let currentTypes = null; | ||
export function wrapWithTypes(types, fn) { | ||
return function (...args) { | ||
const oldTypes = currentTypes; | ||
currentTypes = types; | ||
try { | ||
return fn.apply(this, args); | ||
} finally { | ||
currentTypes = oldTypes; | ||
} | ||
}; | ||
} | ||
export function getTypes() { | ||
return currentTypes; | ||
} | ||
export function runtimeProperty(name) { | ||
const t = getTypes(); | ||
return t.memberExpression( | ||
@@ -16,0 +33,0 @@ t.identifier("regeneratorRuntime"), |
@@ -14,3 +14,2 @@ /** | ||
import assert from "assert"; | ||
import * as t from "babel-types"; | ||
import { hoist } from "./hoist"; | ||
@@ -21,5 +20,5 @@ import { Emitter } from "./emit"; | ||
exports.visitor = { | ||
exports.getVisitor = ({ types: t }) => ({ | ||
Function: { | ||
exit: function(path, state) { | ||
exit: util.wrapWithTypes(t, function(path, state) { | ||
let node = path.node; | ||
@@ -163,5 +162,5 @@ | ||
path.requeue(); | ||
} | ||
}) | ||
} | ||
}; | ||
}); | ||
@@ -173,2 +172,3 @@ // Given a NodePath for a Function, return an Expression node that can be | ||
function getOuterFnExpr(funPath) { | ||
const t = util.getTypes(); | ||
let node = funPath.node; | ||
@@ -195,2 +195,3 @@ t.assertFunction(node); | ||
function getMarkedFunctionId(funPath) { | ||
const t = util.getTypes(); | ||
const node = funPath.node; | ||
@@ -272,4 +273,12 @@ t.assertIdentifier(node.id); | ||
if (node.meta.name === "function" && node.property.name === "sent") { | ||
util.replaceWithOrRemove(path, t.memberExpression(this.context, t.identifier("_sent"))); | ||
if (node.meta.name === "function" && | ||
node.property.name === "sent") { | ||
const t = util.getTypes(); | ||
util.replaceWithOrRemove( | ||
path, | ||
t.memberExpression( | ||
this.context, | ||
t.identifier("_sent") | ||
) | ||
); | ||
} | ||
@@ -285,2 +294,4 @@ } | ||
AwaitExpression: function(path) { | ||
const t = util.getTypes(); | ||
// Convert await expressions to yield expressions. | ||
@@ -287,0 +298,0 @@ let argument = path.node.argument; |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
130289
1
19
3208
- Removedbabel-types@7.0.0-beta.3
- Removedbabel-types@7.0.0-beta.3(transitive)
- Removedesutils@2.0.3(transitive)
- Removedlodash@4.17.21(transitive)
- Removedto-fast-properties@2.0.0(transitive)