@glimmer/util
Version:
Common utilities used in Glimmer
144 lines (121 loc) • 12.1 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isHandle = isHandle;
exports.isNonPrimitiveHandle = isNonPrimitiveHandle;
exports.constants = constants;
exports.isSmallInt = isSmallInt;
exports.encodeNegative = encodeNegative;
exports.decodeNegative = decodeNegative;
exports.encodePositive = encodePositive;
exports.decodePositive = decodePositive;
exports.encodeHandle = encodeHandle;
exports.decodeHandle = decodeHandle;
exports.encodeImmediate = encodeImmediate;
exports.decodeImmediate = decodeImmediate;
var _assert = require("./assert");
function isHandle(value) {
return value >= 0;
}
function isNonPrimitiveHandle(value) {
return value > 3
/* ENCODED_UNDEFINED_HANDLE */
;
}
function constants() {
for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {
values[_key] = arguments[_key];
}
return [false, true, null, undefined].concat(values);
}
function isSmallInt(value) {
return value % 1 === 0 && value <= 536870911
/* MAX_INT */
&& value >= -536870912
/* MIN_INT */
;
}
function encodeNegative(num) {
if (false
/* LOCAL_DEBUG */
) {
(0, _assert.debugAssert)(num % 1 === 0 && num >= -536870912
/* MIN_INT */
&& num < 0, "Could not encode negative: " + num);
}
return num & -536870913
/* SIGN_BIT */
;
}
function decodeNegative(num) {
if (false
/* LOCAL_DEBUG */
) {
(0, _assert.debugAssert)(num % 1 === 0 && num < ~536870911
/* MAX_INT */
&& num >= -1073741824
/* MIN_SMI */
, "Could not decode negative: " + num);
}
return num | ~-536870913
/* SIGN_BIT */
;
}
function encodePositive(num) {
if (false
/* LOCAL_DEBUG */
) {
(0, _assert.debugAssert)(num % 1 === 0 && num >= 0 && num <= 536870911
/* MAX_INT */
, "Could not encode positive: " + num);
}
return ~num;
}
function decodePositive(num) {
if (false
/* LOCAL_DEBUG */
) {
(0, _assert.debugAssert)(num % 1 === 0 && num <= 0 && num >= ~536870911
/* MAX_INT */
, "Could not decode positive: " + num);
}
return ~num;
}
function encodeHandle(num) {
if (false
/* LOCAL_DEBUG */
) {
(0, _assert.debugAssert)(num % 1 === 0 && num >= 0 && num <= 1073741823
/* MAX_SMI */
, "Could not encode handle: " + num);
}
return num;
}
function decodeHandle(num) {
if (false
/* LOCAL_DEBUG */
) {
(0, _assert.debugAssert)(num % 1 === 0 && num <= 1073741823
/* MAX_SMI */
&& num >= 0, "Could not decode handle: " + num);
}
return num;
}
function encodeImmediate(num) {
num |= 0;
return num < 0 ? encodeNegative(num) : encodePositive(num);
}
function decodeImmediate(num) {
num |= 0;
return num > -536870913
/* SIGN_BIT */
? decodePositive(num) : decodeNegative(num);
} // Warm
[1, 2, 3].forEach(function (x) {
return decodeHandle(encodeHandle(x));
});
[1, -1].forEach(function (x) {
return decodeImmediate(encodeImmediate(x));
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3V0aWwvbGliL2ltbWVkaWF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTs7QUF3RE0sU0FBQSxRQUFBLENBQUEsS0FBQSxFQUFnQztBQUNwQyxTQUFPLEtBQUssSUFBWixDQUFBO0FBQ0Q7O0FBRUssU0FBQSxvQkFBQSxDQUFBLEtBQUEsRUFBNEM7QUFDaEQsU0FBTyxLQUFLLEdBQUE7QUFBQTtBQUFaO0FBQ0Q7O0FBRUssU0FBQSxTQUFBLEdBQXdDO0FBQUEsT0FBQSxJQUFBLElBQUEsR0FBQSxTQUFBLENBQUEsTUFBQSxFQUF4QyxNQUF3QyxHQUFBLElBQUEsS0FBQSxDQUFBLElBQUEsQ0FBQSxFQUFBLElBQUEsR0FBQSxDQUFBLEVBQUEsSUFBQSxHQUFBLElBQUEsRUFBQSxJQUFBLEVBQUEsRUFBQTtBQUF4QyxJQUFBLE1BQXdDLENBQUEsSUFBQSxDQUF4QyxHQUF3QyxTQUFBLENBQUEsSUFBQSxDQUF4QztBQUF3Qzs7QUFDNUMsU0FBQSxDQUFBLEtBQUEsRUFBQSxJQUFBLEVBQUEsSUFBQSxFQUFBLFNBQUEsRUFBQSxNQUFBLENBQUEsTUFBQSxDQUFBO0FBQ0Q7O0FBRUssU0FBQSxVQUFBLENBQUEsS0FBQSxFQUFrQztBQUN0QyxTQUNFLEtBQUssR0FBTCxDQUFBLEtBQUEsQ0FBQSxJQUFtQixLQUFLLElBQUE7QUFBQTtBQUF4QixLQUEwRCxLQUFLLElBQUEsQ0FBQTtBQUFBO0FBRGpFO0FBR0Q7O0FBRUssU0FBQSxjQUFBLENBQUEsR0FBQSxFQUFvQztBQUN4QyxNQUFBO0FBQUE7QUFBQSxJQUFpQjtBQUNmLCtCQUNFLEdBQUcsR0FBSCxDQUFBLEtBQUEsQ0FBQSxJQUFpQixHQUFHLElBQUEsQ0FBQTtBQUFBO0FBQXBCLFNBQXNELEdBQUcsR0FEckQsQ0FBTixFQUFNLGdDQUFOLEdBQUE7QUFJRDs7QUFFRCxTQUFPLEdBQUcsR0FBQSxDQUFBO0FBQUE7QUFBVjtBQUNEOztBQUVLLFNBQUEsY0FBQSxDQUFBLEdBQUEsRUFBb0M7QUFDeEMsTUFBQTtBQUFBO0FBQUEsSUFBaUI7QUFDZiwrQkFDRSxHQUFHLEdBQUgsQ0FBQSxLQUFBLENBQUEsSUFBaUIsR0FBRyxHQUFHLENBQUE7QUFBQTtBQUF2QixTQUFzRCxHQUFHLElBQUEsQ0FBQTtBQUFBO0FBRDNELFFBQU0sZ0NBQU4sR0FBQTtBQUlEOztBQUVELFNBQU8sR0FBRyxHQUFHLENBQUEsQ0FBQTtBQUFBO0FBQWI7QUFDRDs7QUFFSyxTQUFBLGNBQUEsQ0FBQSxHQUFBLEVBQW9DO0FBQ3hDLE1BQUE7QUFBQTtBQUFBLElBQWlCO0FBQ2YsK0JBQ0UsR0FBRyxHQUFILENBQUEsS0FBQSxDQUFBLElBQWlCLEdBQUcsSUFBcEIsQ0FBQSxJQUE2QixHQUFHLElBQUE7QUFBQTtBQURsQyxRQUFNLGdDQUFOLEdBQUE7QUFJRDs7QUFFRCxTQUFPLENBQVAsR0FBQTtBQUNEOztBQUVLLFNBQUEsY0FBQSxDQUFBLEdBQUEsRUFBb0M7QUFDeEMsTUFBQTtBQUFBO0FBQUEsSUFBaUI7QUFDZiwrQkFDRSxHQUFHLEdBQUgsQ0FBQSxLQUFBLENBQUEsSUFBaUIsR0FBRyxJQUFwQixDQUFBLElBQTZCLEdBQUcsSUFBSSxDQUFBO0FBQUE7QUFEdEMsUUFBTSxnQ0FBTixHQUFBO0FBSUQ7O0FBRUQsU0FBTyxDQUFQLEdBQUE7QUFDRDs7QUFFSyxTQUFBLFlBQUEsQ0FBQSxHQUFBLEVBQWtDO0FBQ3RDLE1BQUE7QUFBQTtBQUFBLElBQWlCO0FBQ2YsK0JBQ0UsR0FBRyxHQUFILENBQUEsS0FBQSxDQUFBLElBQWlCLEdBQUcsSUFBcEIsQ0FBQSxJQUE2QixHQUFHLElBQUE7QUFBQTtBQURsQyxRQUFNLDhCQUFOLEdBQUE7QUFJRDs7QUFFRCxTQUFBLEdBQUE7QUFDRDs7QUFFSyxTQUFBLFlBQUEsQ0FBQSxHQUFBLEVBQWtDO0FBQ3RDLE1BQUE7QUFBQTtBQUFBLElBQWlCO0FBQ2YsK0JBQ0UsR0FBRyxHQUFILENBQUEsS0FBQSxDQUFBLElBQWlCLEdBQUcsSUFBQTtBQUFBO0FBQXBCLFNBQXNELEdBQUcsSUFEckQsQ0FBTixFQUFNLDhCQUFOLEdBQUE7QUFJRDs7QUFFRCxTQUFBLEdBQUE7QUFDRDs7QUFFSyxTQUFBLGVBQUEsQ0FBQSxHQUFBLEVBQXFDO0FBQ3pDLEVBQUEsR0FBRyxJQUFILENBQUE7QUFDQSxTQUFPLEdBQUcsR0FBSCxDQUFBLEdBQVUsY0FBYyxDQUF4QixHQUF3QixDQUF4QixHQUFnQyxjQUFjLENBQXJELEdBQXFELENBQXJEO0FBQ0Q7O0FBRUssU0FBQSxlQUFBLENBQUEsR0FBQSxFQUFxQztBQUN6QyxFQUFBLEdBQUcsSUFBSCxDQUFBO0FBQ0EsU0FBTyxHQUFHLEdBQUEsQ0FBQTtBQUFBO0FBQUgsSUFBb0MsY0FBYyxDQUFsRCxHQUFrRCxDQUFsRCxHQUEwRCxjQUFjLENBQS9FLEdBQStFLENBQS9FO0VBR0Y7OztBQUNBLENBQUEsQ0FBQSxFQUFBLENBQUEsRUFBQSxDQUFBLEVBQUEsT0FBQSxDQUFtQixVQUFELENBQUMsRUFBRDtBQUFBLFNBQU8sWUFBWSxDQUFDLFlBQVksQ0FBbEQsQ0FBa0QsQ0FBYixDQUFuQjtBQUFsQixDQUFBO0FBQ0EsQ0FBQSxDQUFBLEVBQUksQ0FBSixDQUFBLEVBQUEsT0FBQSxDQUFpQixVQUFELENBQUMsRUFBRDtBQUFBLFNBQU8sZUFBZSxDQUFDLGVBQWUsQ0FBdEQsQ0FBc0QsQ0FBaEIsQ0FBdEI7QUFBaEIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExPQ0FMX0RFQlVHIH0gZnJvbSAnQGdsaW1tZXIvbG9jYWwtZGVidWctZmxhZ3MnO1xuaW1wb3J0IHsgZGVidWdBc3NlcnQgYXMgYXNzZXJ0IH0gZnJvbSAnLi9hc3NlcnQnO1xuXG4vKlxuICBFbmNvZGluZyBub3Rlc1xuXG4gIFdlIHVzZSAzMCBiaXQgaW50ZWdlcnMgZm9yIGVuY29kaW5nLCBzbyB0aGF0IHdlIGRvbid0IGV2ZXIgZW5jb2RlIGEgbm9uLVNNSVxuICBpbnRlZ2VyIHRvIHB1c2ggb24gdGhlIHN0YWNrLlxuXG4gIEhhbmRsZXMgYXJlID49IDBcbiAgSW1tZWRpYXRlcyBhcmUgPCAwXG5cbiAgVHJ1ZSwgRmFsc2UsIFVuZGVmaW5lZCBhbmQgTnVsbCBhcmUgcHVzaGVkIGFzIGhhbmRsZXMgaW50byB0aGUgc3ltYm9sIHRhYmxlLFxuICB3aXRoIHdlbGwga25vd24gaGFuZGxlcyAoMCwgMSwgMiwgMylcblxuICBUaGUgbmVnYXRpdmUgc3BhY2UgaXMgZGl2aWRlZCBpbnRvIHBvc2l0aXZlcyBhbmQgbmVnYXRpdmVzLiBQb3NpdGl2ZXMgYXJlXG4gIGhpZ2hlciBudW1iZXJzICgtMSwgLTIsIC0zLCBldGMpLCBuZWdhdGl2ZXMgYXJlIGxvd2VyLlxuXG4gIFdlIG9ubHkgZW5jb2RlIGltbWVkaWF0ZXMgZm9yIHR3byByZWFzb25zOlxuXG4gIDEuIFRvIHRyYW5zZmVyIG92ZXIgdGhlIHdpcmUsIHNvIHRoZXkncmUgc21hbGxlciBpbiBnZW5lcmFsXG4gIDIuIFdoZW4gcHVzaGluZyB2YWx1ZXMgb250byB0aGUgc3RhY2sgZnJvbSB0aGUgbG93IGxldmVsL2lubmVyIFZNLCB3aGljaCBtYXlcbiAgICAgYmUgY29udmVydGVkIGludG8gV0FTTSBvbmUgZGF5LlxuXG4gIFRoaXMgYWxsb3dzIHRoZSBsb3ctbGV2ZWwgVk0gdG8gYWx3YXlzIHVzZSBTTUlzLCBhbmQgdG8gbWluaW1pemUgdXNpbmcgSlNcbiAgdmFsdWVzIHZpYSBoYW5kbGVzIGZvciB0aGluZ3MgbGlrZSB0aGUgc3RhY2sgcG9pbnRlciBhbmQgZnJhbWUgcG9pbnRlci5cbiAgRXh0ZXJuYWxseSwgbW9zdCBjb2RlIHB1c2hlcyB2YWx1ZXMgYXMgSlMgdmFsdWVzLCBleGNlcHQgd2hlbiBiZWluZyBwdWxsZWRcbiAgZnJvbSB0aGUgYXBwZW5kIGJ5dGUgY29kZSB3aGVyZSBpdCB3YXMgYWxyZWFkeSBlbmNvZGVkLlxuXG4gIExvZ2ljYWxseSwgdGhpcyBpcyBiZWNhdXNlIHRoZSBsb3cgbGV2ZWwgVk0gZG9lc24ndCByZWFsbHkgY2FyZSBhYm91dCB0aGVzZVxuICBoaWdoZXIgbGV2ZWwgdmFsdWVzLiBGb3IgaW5zdGFuY2UsIHRoZSByZXN1bHQgb2YgYSB1c2VybGFuZCBoZWxwZXIgbWF5IGJlIGFcbiAgbnVtYmVyLCBvciBhIGJvb2xlYW4sIG9yIHVuZGVmaW5lZC9udWxsLCBidXQgaXQncyBleHRyYSB3b3JrIHRvIGZpZ3VyZSB0aGF0XG4gIG91dCBhbmQgcHVzaCBpdCBjb3JyZWN0bHksIHZzLiBqdXN0IHB1c2hpbmcgdGhlIHZhbHVlIGFzIGEgSlMgdmFsdWUgd2l0aCBhXG4gIGhhbmRsZS5cblxuICBOb3RlOiBUaGUgZGV0YWlscyBjb3VsZCBjaGFuZ2UgaGVyZSBpbiB0aGUgZnV0dXJlLCB0aGlzIGlzIGp1c3QgdGhlIGN1cnJlbnRcbiAgc3RyYXRlZ3kuXG4qL1xuXG5leHBvcnQgY29uc3QgZW51bSBJbW1lZGlhdGVDb25zdGFudHMge1xuICBNQVhfU01JID0gMiAqKiAzMCAtIDEsXG4gIE1JTl9TTUkgPSB+TUFYX1NNSSxcbiAgU0lHTl9CSVQgPSB+KDIgKiogMjkpLFxuICBNQVhfSU5UID0gflNJR05fQklUIC0gMSxcbiAgTUlOX0lOVCA9IH5NQVhfSU5ULFxuXG4gIEZBTFNFX0hBTkRMRSA9IDAsXG4gIFRSVUVfSEFORExFID0gMSxcbiAgTlVMTF9IQU5ETEUgPSAyLFxuICBVTkRFRklORURfSEFORExFID0gMyxcblxuICBFTkNPREVEX0ZBTFNFX0hBTkRMRSA9IEZBTFNFX0hBTkRMRSxcbiAgRU5DT0RFRF9UUlVFX0hBTkRMRSA9IFRSVUVfSEFORExFLFxuICBFTkNPREVEX05VTExfSEFORExFID0gTlVMTF9IQU5ETEUsXG4gIEVOQ09ERURfVU5ERUZJTkVEX0hBTkRMRSA9IFVOREVGSU5FRF9IQU5ETEUsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hhbmRsZSh2YWx1ZTogbnVtYmVyKSB7XG4gIHJldHVybiB2YWx1ZSA+PSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb25QcmltaXRpdmVIYW5kbGUodmFsdWU6IG51bWJlcikge1xuICByZXR1cm4gdmFsdWUgPiBJbW1lZGlhdGVDb25zdGFudHMuRU5DT0RFRF9VTkRFRklORURfSEFORExFO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RhbnRzKC4uLnZhbHVlczogdW5rbm93bltdKTogdW5rbm93bltdIHtcbiAgcmV0dXJuIFtmYWxzZSwgdHJ1ZSwgbnVsbCwgdW5kZWZpbmVkLCAuLi52YWx1ZXNdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTbWFsbEludCh2YWx1ZTogbnVtYmVyKSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgJSAxID09PSAwICYmIHZhbHVlIDw9IEltbWVkaWF0ZUNvbnN0YW50cy5NQVhfSU5UICYmIHZhbHVlID49IEltbWVkaWF0ZUNvbnN0YW50cy5NSU5fSU5UXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVOZWdhdGl2ZShudW06IG51bWJlcikge1xuICBpZiAoTE9DQUxfREVCVUcpIHtcbiAgICBhc3NlcnQoXG4gICAgICBudW0gJSAxID09PSAwICYmIG51bSA+PSBJbW1lZGlhdGVDb25zdGFudHMuTUlOX0lOVCAmJiBudW0gPCAwLFxuICAgICAgYENvdWxkIG5vdCBlbmNvZGUgbmVnYXRpdmU6ICR7bnVtfWBcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG51bSAmIEltbWVkaWF0ZUNvbnN0YW50cy5TSUdOX0JJVDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZU5lZ2F0aXZlKG51bTogbnVtYmVyKSB7XG4gIGlmIChMT0NBTF9ERUJVRykge1xuICAgIGFzc2VydChcbiAgICAgIG51bSAlIDEgPT09IDAgJiYgbnVtIDwgfkltbWVkaWF0ZUNvbnN0YW50cy5NQVhfSU5UICYmIG51bSA+PSBJbW1lZGlhdGVDb25zdGFudHMuTUlOX1NNSSxcbiAgICAgIGBDb3VsZCBub3QgZGVjb2RlIG5lZ2F0aXZlOiAke251bX1gXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBudW0gfCB+SW1tZWRpYXRlQ29uc3RhbnRzLlNJR05fQklUO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlUG9zaXRpdmUobnVtOiBudW1iZXIpIHtcbiAgaWYgKExPQ0FMX0RFQlVHKSB7XG4gICAgYXNzZXJ0KFxuICAgICAgbnVtICUgMSA9PT0gMCAmJiBudW0gPj0gMCAmJiBudW0gPD0gSW1tZWRpYXRlQ29uc3RhbnRzLk1BWF9JTlQsXG4gICAgICBgQ291bGQgbm90IGVuY29kZSBwb3NpdGl2ZTogJHtudW19YFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gfm51bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVBvc2l0aXZlKG51bTogbnVtYmVyKSB7XG4gIGlmIChMT0NBTF9ERUJVRykge1xuICAgIGFzc2VydChcbiAgICAgIG51bSAlIDEgPT09IDAgJiYgbnVtIDw9IDAgJiYgbnVtID49IH5JbW1lZGlhdGVDb25zdGFudHMuTUFYX0lOVCxcbiAgICAgIGBDb3VsZCBub3QgZGVjb2RlIHBvc2l0aXZlOiAke251bX1gXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB+bnVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlSGFuZGxlKG51bTogbnVtYmVyKSB7XG4gIGlmIChMT0NBTF9ERUJVRykge1xuICAgIGFzc2VydChcbiAgICAgIG51bSAlIDEgPT09IDAgJiYgbnVtID49IDAgJiYgbnVtIDw9IEltbWVkaWF0ZUNvbnN0YW50cy5NQVhfU01JLFxuICAgICAgYENvdWxkIG5vdCBlbmNvZGUgaGFuZGxlOiAke251bX1gXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVIYW5kbGUobnVtOiBudW1iZXIpIHtcbiAgaWYgKExPQ0FMX0RFQlVHKSB7XG4gICAgYXNzZXJ0KFxuICAgICAgbnVtICUgMSA9PT0gMCAmJiBudW0gPD0gSW1tZWRpYXRlQ29uc3RhbnRzLk1BWF9TTUkgJiYgbnVtID49IDAsXG4gICAgICBgQ291bGQgbm90IGRlY29kZSBoYW5kbGU6ICR7bnVtfWBcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG51bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUltbWVkaWF0ZShudW06IG51bWJlcikge1xuICBudW0gfD0gMDtcbiAgcmV0dXJuIG51bSA8IDAgPyBlbmNvZGVOZWdhdGl2ZShudW0pIDogZW5jb2RlUG9zaXRpdmUobnVtKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUltbWVkaWF0ZShudW06IG51bWJlcikge1xuICBudW0gfD0gMDtcbiAgcmV0dXJuIG51bSA+IEltbWVkaWF0ZUNvbnN0YW50cy5TSUdOX0JJVCA/IGRlY29kZVBvc2l0aXZlKG51bSkgOiBkZWNvZGVOZWdhdGl2ZShudW0pO1xufVxuXG4vLyBXYXJtXG5bMSwgMiwgM10uZm9yRWFjaCgoeCkgPT4gZGVjb2RlSGFuZGxlKGVuY29kZUhhbmRsZSh4KSkpO1xuWzEsIC0xXS5mb3JFYWNoKCh4KSA9PiBkZWNvZGVJbW1lZGlhdGUoZW5jb2RlSW1tZWRpYXRlKHgpKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9
;