/* */ "format cjs"; /** * This class is responsible for a binding inside of a scope. * * It tracks the following: * * * Node path. * * Amount of times referenced by other nodes. * * Paths to nodes that reassign or modify this binding. * * The kind of binding. (Is it a parameter, declaration etc) */ "use strict"; exports.__esModule = true; // istanbul ignore next function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Binding = (function () { function Binding(_ref) { var existing = _ref.existing; var identifier = _ref.identifier; var scope = _ref.scope; var path = _ref.path; var kind = _ref.kind; _classCallCheck(this, Binding); this.constantViolations = []; this.constant = true; this.identifier = identifier; this.references = 0; this.referenced = false; this.scope = scope; this.path = path; this.kind = kind; this.hasValue = false; this.hasDeoptedValue = false; this.value = null; this.clearValue(); if (existing) { this.constantViolations = [].concat(existing.path, existing.constantViolations, this.constantViolations); } } /** * [Please add a description.] */ Binding.prototype.deoptValue = function deoptValue() { this.clearValue(); this.hasDeoptedValue = true; }; /** * [Please add a description.] */ Binding.prototype.setValue = function setValue(value) { if (this.hasDeoptedValue) return; this.hasValue = true; this.value = value; }; /** * [Please add a description.] */ Binding.prototype.clearValue = function clearValue() { this.hasDeoptedValue = false; this.hasValue = false; this.value = null; }; /** * Register a constant violation with the provided `path`. */ Binding.prototype.reassign = function reassign(path) { this.constant = false; this.constantViolations.push(path); }; /** * Increment the amount of references to this binding. */ Binding.prototype.reference = function reference() { this.referenced = true; this.references++; }; /** * Decrement the amount of references to this binding. */ Binding.prototype.dereference = function dereference() { this.references--; this.referenced = !!this.references; }; return Binding; })(); exports["default"] = Binding; module.exports = exports["default"];