/** * 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"; var _classCallCheck = require("babel-runtime/helpers/class-call-check")["default"]; exports.__esModule = true; 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.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(); if (existing) { this.constantViolations = [].concat(existing.path, existing.constantViolations, this.constantViolations); } } Binding.prototype.deoptValue = function deoptValue() { this.clearValue(); this.hasDeoptedValue = true; }; Binding.prototype.setValue = function setValue(value) { if (this.hasDeoptedValue) return; this.hasValue = true; this.value = value; }; 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; if (this.constantViolations.indexOf(path) !== -1) { return; } this.constantViolations.push(path); }; /** * Increment the amount of references to this binding. */ Binding.prototype.reference = function reference(path) { this.referenced = true; this.references++; this.referencePaths.push(path); }; /** * 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"];