You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.3 KiB
75 lines
1.3 KiB
"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; |
|
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; |