aboutsummaryrefslogtreecommitdiff
path: root/node_modules/@babel/plugin-transform-block-scoping/lib/tdz.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@babel/plugin-transform-block-scoping/lib/tdz.js')
-rw-r--r--node_modules/@babel/plugin-transform-block-scoping/lib/tdz.js96
1 files changed, 0 insertions, 96 deletions
diff --git a/node_modules/@babel/plugin-transform-block-scoping/lib/tdz.js b/node_modules/@babel/plugin-transform-block-scoping/lib/tdz.js
deleted file mode 100644
index df5b4d41..00000000
--- a/node_modules/@babel/plugin-transform-block-scoping/lib/tdz.js
+++ /dev/null
@@ -1,96 +0,0 @@
-"use strict";
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.visitor = void 0;
-
-function _core() {
- const data = require("@babel/core");
-
- _core = function _core() {
- return data;
- };
-
- return data;
-}
-
-function getTDZStatus(refPath, bindingPath) {
- const executionStatus = bindingPath._guessExecutionStatusRelativeTo(refPath);
-
- if (executionStatus === "before") {
- return "inside";
- } else if (executionStatus === "after") {
- return "outside";
- } else {
- return "maybe";
- }
-}
-
-function buildTDZAssert(node, state) {
- return _core().types.callExpression(state.addHelper("temporalRef"), [node, _core().types.stringLiteral(node.name)]);
-}
-
-function isReference(node, scope, state) {
- const declared = state.letReferences[node.name];
- if (!declared) return false;
- return scope.getBindingIdentifier(node.name) === declared;
-}
-
-const visitor = {
- ReferencedIdentifier(path, state) {
- if (!state.tdzEnabled) return;
- const node = path.node,
- parent = path.parent,
- scope = path.scope;
- if (path.parentPath.isFor({
- left: node
- })) return;
- if (!isReference(node, scope, state)) return;
- const bindingPath = scope.getBinding(node.name).path;
- if (bindingPath.isFunctionDeclaration()) return;
- const status = getTDZStatus(path, bindingPath);
- if (status === "inside") return;
-
- if (status === "maybe") {
- const assert = buildTDZAssert(node, state);
- bindingPath.parent._tdzThis = true;
- path.skip();
-
- if (path.parentPath.isUpdateExpression()) {
- if (parent._ignoreBlockScopingTDZ) return;
- path.parentPath.replaceWith(_core().types.sequenceExpression([assert, parent]));
- } else {
- path.replaceWith(assert);
- }
- } else if (status === "outside") {
- path.replaceWith(_core().types.throwStatement(_core().types.inherits(_core().types.newExpression(_core().types.identifier("ReferenceError"), [_core().types.stringLiteral(`${node.name} is not defined - temporal dead zone`)]), node)));
- }
- },
-
- AssignmentExpression: {
- exit(path, state) {
- if (!state.tdzEnabled) return;
- const node = path.node;
- if (node._ignoreBlockScopingTDZ) return;
- const nodes = [];
- const ids = path.getBindingIdentifiers();
-
- for (const name in ids) {
- const id = ids[name];
-
- if (isReference(id, path.scope, state)) {
- nodes.push(buildTDZAssert(id, state));
- }
- }
-
- if (nodes.length) {
- node._ignoreBlockScopingTDZ = true;
- nodes.push(node);
- path.replaceWithMultiple(nodes.map(_core().types.expressionStatement));
- }
- }
-
- }
-};
-exports.visitor = visitor; \ No newline at end of file