UNPKG

@glimmer/util

Version:

Common utilities used in Glimmer

144 lines (121 loc) 12.1 kB
"use strict"; 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