"use strict"; exports.__esModule = true; var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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; (0, _classCallCheck3.default)(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; }; Binding.prototype.reassign = function reassign(path) { this.constant = false; if (this.constantViolations.indexOf(path) !== -1) { return; } this.constantViolations.push(path); }; Binding.prototype.reference = function reference(path) { if (this.referencePaths.indexOf(path) !== -1) { return; } this.referenced = true; this.references++; this.referencePaths.push(path); }; Binding.prototype.dereference = function dereference() { this.references--; this.referenced = !!this.references; }; return Binding; }(); exports.default = Binding; module.exports = exports["default"];