123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- class Binding {
- constructor({
- identifier,
- scope,
- path,
- kind
- }) {
- this.identifier = void 0;
- this.scope = void 0;
- this.path = void 0;
- this.kind = void 0;
- this.constantViolations = [];
- this.constant = true;
- this.referencePaths = [];
- this.referenced = false;
- this.references = 0;
- this.identifier = identifier;
- this.scope = scope;
- this.path = path;
- this.kind = kind;
- if ((kind === "var" || kind === "hoisted") &&
- isDeclaredInLoop(path || (() => {
- throw new Error("Internal Babel error: unreachable ");
- })())) {
- this.reassign(path);
- }
- this.clearValue();
- }
- deoptValue() {
- this.clearValue();
- this.hasDeoptedValue = true;
- }
- setValue(value) {
- if (this.hasDeoptedValue) return;
- this.hasValue = true;
- this.value = value;
- }
- clearValue() {
- this.hasDeoptedValue = false;
- this.hasValue = false;
- this.value = null;
- }
- reassign(path) {
- this.constant = false;
- if (this.constantViolations.indexOf(path) !== -1) {
- return;
- }
- this.constantViolations.push(path);
- }
- reference(path) {
- if (this.referencePaths.indexOf(path) !== -1) {
- return;
- }
- this.referenced = true;
- this.references++;
- this.referencePaths.push(path);
- }
- dereference() {
- this.references--;
- this.referenced = !!this.references;
- }
- }
- exports.default = Binding;
- function isDeclaredInLoop(path) {
- for (let {
- parentPath,
- key
- } = path; parentPath; ({
- parentPath,
- key
- } = parentPath)) {
- if (parentPath.isFunctionParent()) return false;
- if (parentPath.isWhile() || parentPath.isForXStatement() || parentPath.isForStatement() && key === "body") {
- return true;
- }
- }
- return false;
- }
- //# sourceMappingURL=binding.js.map
|