| "use strict"; |
| |
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| exports.default = void 0; |
| |
| class Binding { |
| constructor({ |
| identifier, |
| scope, |
| path, |
| kind |
| }) { |
| this.identifier = identifier; |
| this.scope = scope; |
| this.path = path; |
| this.kind = kind; |
| this.constantViolations = []; |
| this.constant = true; |
| this.referencePaths = []; |
| this.referenced = false; |
| this.references = 0; |
| 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; |