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.
82 lines
2.0 KiB
82 lines
2.0 KiB
"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, |
|
identifier = _ref.identifier, |
|
scope = _ref.scope, |
|
path = _ref.path, |
|
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"]; |