[babel 8] Do not skip requeued paths (#13291)
This commit is contained in:
parent
b2d9156cc6
commit
875fc8e693
@ -27,6 +27,8 @@ function isReference(node, scope, state) {
|
|||||||
return scope.getBindingIdentifier(node.name) === declared;
|
return scope.getBindingIdentifier(node.name) === declared;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const visitedMaybeTDZNodes = new WeakSet();
|
||||||
|
|
||||||
export const visitor = {
|
export const visitor = {
|
||||||
ReferencedIdentifier(path, state) {
|
ReferencedIdentifier(path, state) {
|
||||||
if (!state.tdzEnabled) return;
|
if (!state.tdzEnabled) return;
|
||||||
@ -44,13 +46,15 @@ export const visitor = {
|
|||||||
if (status === "outside") return;
|
if (status === "outside") return;
|
||||||
|
|
||||||
if (status === "maybe") {
|
if (status === "maybe") {
|
||||||
|
if (visitedMaybeTDZNodes.has(node)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
visitedMaybeTDZNodes.add(node);
|
||||||
const assert = buildTDZAssert(node, state);
|
const assert = buildTDZAssert(node, state);
|
||||||
|
|
||||||
// add tdzThis to parent variable declarator so it's exploded
|
// add tdzThis to parent variable declarator so it's exploded
|
||||||
bindingPath.parent._tdzThis = true;
|
bindingPath.parent._tdzThis = true;
|
||||||
|
|
||||||
path.skip();
|
|
||||||
|
|
||||||
if (path.parentPath.isUpdateExpression()) {
|
if (path.parentPath.isUpdateExpression()) {
|
||||||
if (parent._ignoreBlockScopingTDZ) return;
|
if (parent._ignoreBlockScopingTDZ) return;
|
||||||
path.parentPath.replaceWith(t.sequenceExpression([assert, parent]));
|
path.parentPath.replaceWith(t.sequenceExpression([assert, parent]));
|
||||||
|
|||||||
@ -251,13 +251,11 @@ export function setKey(this: NodePath, key) {
|
|||||||
export function requeue(this: NodePath, pathToQueue = this) {
|
export function requeue(this: NodePath, pathToQueue = this) {
|
||||||
if (pathToQueue.removed) return;
|
if (pathToQueue.removed) return;
|
||||||
|
|
||||||
// TODO: Uncomment in Babel 8. If a path is skipped, and then replaced with a
|
// If a path is skipped, and then replaced with a
|
||||||
// new one, the new one shouldn't probably be skipped.
|
// new one, the new one shouldn't probably be skipped.
|
||||||
// Note that this currently causes an infinite loop because of
|
if (process.env.BABEL_8_BREAKING) {
|
||||||
// packages/babel-plugin-transform-block-scoping/src/tdz.js#L52-L59
|
pathToQueue.shouldSkip = false;
|
||||||
// (b5b8055cc00756f94bf71deb45f288738520ee3c)
|
}
|
||||||
//
|
|
||||||
// pathToQueue.shouldSkip = false;
|
|
||||||
|
|
||||||
// TODO(loganfsmyth): This should be switched back to queue in parent contexts
|
// TODO(loganfsmyth): This should be switched back to queue in parent contexts
|
||||||
// automatically once #2892 and #4135 have been resolved. See #4140.
|
// automatically once #2892 and #4135 have been resolved. See #4140.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user