UNPKG

11.7 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.isHandle = isHandle;
7exports.isNonPrimitiveHandle = isNonPrimitiveHandle;
8exports.constants = constants;
9exports.isSmallInt = isSmallInt;
10exports.encodeNegative = encodeNegative;
11exports.decodeNegative = decodeNegative;
12exports.encodePositive = encodePositive;
13exports.decodePositive = decodePositive;
14exports.encodeHandle = encodeHandle;
15exports.decodeHandle = decodeHandle;
16exports.encodeImmediate = encodeImmediate;
17exports.decodeImmediate = decodeImmediate;
18
19var _assert = require("./assert");
20
21function isHandle(value) {
22 return value >= 0;
23}
24
25function isNonPrimitiveHandle(value) {
26 return value > 3
27 /* ENCODED_UNDEFINED_HANDLE */
28 ;
29}
30
31function constants(...values) {
32 return [false, true, null, undefined, ...values];
33}
34
35function isSmallInt(value) {
36 return value % 1 === 0 && value <= 536870911
37 /* MAX_INT */
38 && value >= -536870912
39 /* MIN_INT */
40 ;
41}
42
43function encodeNegative(num) {
44 if (false
45 /* LOCAL_DEBUG */
46 ) {
47 (0, _assert.debugAssert)(num % 1 === 0 && num >= -536870912
48 /* MIN_INT */
49 && num < 0, `Could not encode negative: ${num}`);
50 }
51
52 return num & -536870913
53 /* SIGN_BIT */
54 ;
55}
56
57function decodeNegative(num) {
58 if (false
59 /* LOCAL_DEBUG */
60 ) {
61 (0, _assert.debugAssert)(num % 1 === 0 && num < ~536870911
62 /* MAX_INT */
63 && num >= -1073741824
64 /* MIN_SMI */
65 , `Could not decode negative: ${num}`);
66 }
67
68 return num | ~-536870913
69 /* SIGN_BIT */
70 ;
71}
72
73function encodePositive(num) {
74 if (false
75 /* LOCAL_DEBUG */
76 ) {
77 (0, _assert.debugAssert)(num % 1 === 0 && num >= 0 && num <= 536870911
78 /* MAX_INT */
79 , `Could not encode positive: ${num}`);
80 }
81
82 return ~num;
83}
84
85function decodePositive(num) {
86 if (false
87 /* LOCAL_DEBUG */
88 ) {
89 (0, _assert.debugAssert)(num % 1 === 0 && num <= 0 && num >= ~536870911
90 /* MAX_INT */
91 , `Could not decode positive: ${num}`);
92 }
93
94 return ~num;
95}
96
97function encodeHandle(num) {
98 if (false
99 /* LOCAL_DEBUG */
100 ) {
101 (0, _assert.debugAssert)(num % 1 === 0 && num >= 0 && num <= 1073741823
102 /* MAX_SMI */
103 , `Could not encode handle: ${num}`);
104 }
105
106 return num;
107}
108
109function decodeHandle(num) {
110 if (false
111 /* LOCAL_DEBUG */
112 ) {
113 (0, _assert.debugAssert)(num % 1 === 0 && num <= 1073741823
114 /* MAX_SMI */
115 && num >= 0, `Could not decode handle: ${num}`);
116 }
117
118 return num;
119}
120
121function encodeImmediate(num) {
122 num |= 0;
123 return num < 0 ? encodeNegative(num) : encodePositive(num);
124}
125
126function decodeImmediate(num) {
127 num |= 0;
128 return num > -536870913
129 /* SIGN_BIT */
130 ? decodePositive(num) : decodeNegative(num);
131} // Warm
132
133
134[1, 2, 3].forEach(x => decodeHandle(encodeHandle(x)));
135[1, -1].forEach(x => decodeImmediate(encodeImmediate(x)));
136//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3V0aWwvbGliL2ltbWVkaWF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTs7QUF3RE0sU0FBQSxRQUFBLENBQUEsS0FBQSxFQUFnQztBQUNwQyxTQUFPLEtBQUssSUFBWixDQUFBO0FBQ0Q7O0FBRUssU0FBQSxvQkFBQSxDQUFBLEtBQUEsRUFBNEM7QUFDaEQsU0FBTyxLQUFLLEdBQUE7QUFBQTtBQUFaO0FBQ0Q7O0FBRUssU0FBQSxTQUFBLENBQW9CLEdBQXBCLE1BQUEsRUFBd0M7QUFDNUMsU0FBTyxDQUFBLEtBQUEsRUFBQSxJQUFBLEVBQUEsSUFBQSxFQUFBLFNBQUEsRUFBK0IsR0FBdEMsTUFBTyxDQUFQO0FBQ0Q7O0FBRUssU0FBQSxVQUFBLENBQUEsS0FBQSxFQUFrQztBQUN0QyxTQUNFLEtBQUssR0FBTCxDQUFBLEtBQUEsQ0FBQSxJQUFtQixLQUFLLElBQUE7QUFBQTtBQUF4QixLQUEwRCxLQUFLLElBQUEsQ0FBQTtBQUFBO0FBRGpFO0FBR0Q7O0FBRUssU0FBQSxjQUFBLENBQUEsR0FBQSxFQUFvQztBQUN4QyxNQUFBO0FBQUE7QUFBQSxJQUFpQjtBQUNmLCtCQUNFLEdBQUcsR0FBSCxDQUFBLEtBQUEsQ0FBQSxJQUFpQixHQUFHLElBQUEsQ0FBQTtBQUFBO0FBQXBCLFNBQXNELEdBQUcsR0FEckQsQ0FBTixFQUVFLDhCQUE4QixHQUZoQyxFQUFBO0FBSUQ7O0FBRUQsU0FBTyxHQUFHLEdBQUEsQ0FBQTtBQUFBO0FBQVY7QUFDRDs7QUFFSyxTQUFBLGNBQUEsQ0FBQSxHQUFBLEVBQW9DO0FBQ3hDLE1BQUE7QUFBQTtBQUFBLElBQWlCO0FBQ2YsK0JBQ0UsR0FBRyxHQUFILENBQUEsS0FBQSxDQUFBLElBQWlCLEdBQUcsR0FBRyxDQUFBO0FBQUE7QUFBdkIsU0FBc0QsR0FBRyxJQUFBLENBQUE7QUFBQTtBQUQzRCxRQUVFLDhCQUE4QixHQUZoQyxFQUFBO0FBSUQ7O0FBRUQsU0FBTyxHQUFHLEdBQUcsQ0FBQSxDQUFBO0FBQUE7QUFBYjtBQUNEOztBQUVLLFNBQUEsY0FBQSxDQUFBLEdBQUEsRUFBb0M7QUFDeEMsTUFBQTtBQUFBO0FBQUEsSUFBaUI7QUFDZiwrQkFDRSxHQUFHLEdBQUgsQ0FBQSxLQUFBLENBQUEsSUFBaUIsR0FBRyxJQUFwQixDQUFBLElBQTZCLEdBQUcsSUFBQTtBQUFBO0FBRGxDLFFBRUUsOEJBQThCLEdBRmhDLEVBQUE7QUFJRDs7QUFFRCxTQUFPLENBQVAsR0FBQTtBQUNEOztBQUVLLFNBQUEsY0FBQSxDQUFBLEdBQUEsRUFBb0M7QUFDeEMsTUFBQTtBQUFBO0FBQUEsSUFBaUI7QUFDZiwrQkFDRSxHQUFHLEdBQUgsQ0FBQSxLQUFBLENBQUEsSUFBaUIsR0FBRyxJQUFwQixDQUFBLElBQTZCLEdBQUcsSUFBSSxDQUFBO0FBQUE7QUFEdEMsUUFFRSw4QkFBOEIsR0FGaEMsRUFBQTtBQUlEOztBQUVELFNBQU8sQ0FBUCxHQUFBO0FBQ0Q7O0FBRUssU0FBQSxZQUFBLENBQUEsR0FBQSxFQUFrQztBQUN0QyxNQUFBO0FBQUE7QUFBQSxJQUFpQjtBQUNmLCtCQUNFLEdBQUcsR0FBSCxDQUFBLEtBQUEsQ0FBQSxJQUFpQixHQUFHLElBQXBCLENBQUEsSUFBNkIsR0FBRyxJQUFBO0FBQUE7QUFEbEMsUUFFRSw0QkFBNEIsR0FGOUIsRUFBQTtBQUlEOztBQUVELFNBQUEsR0FBQTtBQUNEOztBQUVLLFNBQUEsWUFBQSxDQUFBLEdBQUEsRUFBa0M7QUFDdEMsTUFBQTtBQUFBO0FBQUEsSUFBaUI7QUFDZiwrQkFDRSxHQUFHLEdBQUgsQ0FBQSxLQUFBLENBQUEsSUFBaUIsR0FBRyxJQUFBO0FBQUE7QUFBcEIsU0FBc0QsR0FBRyxJQURyRCxDQUFOLEVBRUUsNEJBQTRCLEdBRjlCLEVBQUE7QUFJRDs7QUFFRCxTQUFBLEdBQUE7QUFDRDs7QUFFSyxTQUFBLGVBQUEsQ0FBQSxHQUFBLEVBQXFDO0FBQ3pDLEVBQUEsR0FBRyxJQUFILENBQUE7QUFDQSxTQUFPLEdBQUcsR0FBSCxDQUFBLEdBQVUsY0FBYyxDQUF4QixHQUF3QixDQUF4QixHQUFnQyxjQUFjLENBQXJELEdBQXFELENBQXJEO0FBQ0Q7O0FBRUssU0FBQSxlQUFBLENBQUEsR0FBQSxFQUFxQztBQUN6QyxFQUFBLEdBQUcsSUFBSCxDQUFBO0FBQ0EsU0FBTyxHQUFHLEdBQUEsQ0FBQTtBQUFBO0FBQUgsSUFBb0MsY0FBYyxDQUFsRCxHQUFrRCxDQUFsRCxHQUEwRCxjQUFjLENBQS9FLEdBQStFLENBQS9FO0VBR0Y7OztBQUNBLENBQUEsQ0FBQSxFQUFBLENBQUEsRUFBQSxDQUFBLEVBQUEsT0FBQSxDQUFtQixDQUFELElBQU8sWUFBWSxDQUFDLFlBQVksQ0FBbEQsQ0FBa0QsQ0FBYixDQUFyQztBQUNBLENBQUEsQ0FBQSxFQUFJLENBQUosQ0FBQSxFQUFBLE9BQUEsQ0FBaUIsQ0FBRCxJQUFPLGVBQWUsQ0FBQyxlQUFlLENBQXRELENBQXNELENBQWhCLENBQXRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTE9DQUxfREVCVUcgfSBmcm9tICdAZ2xpbW1lci9sb2NhbC1kZWJ1Zy1mbGFncyc7XG5pbXBvcnQgeyBkZWJ1Z0Fzc2VydCBhcyBhc3NlcnQgfSBmcm9tICcuL2Fzc2VydCc7XG5cbi8qXG4gIEVuY29kaW5nIG5vdGVzXG5cbiAgV2UgdXNlIDMwIGJpdCBpbnRlZ2VycyBmb3IgZW5jb2RpbmcsIHNvIHRoYXQgd2UgZG9uJ3QgZXZlciBlbmNvZGUgYSBub24tU01JXG4gIGludGVnZXIgdG8gcHVzaCBvbiB0aGUgc3RhY2suXG5cbiAgSGFuZGxlcyBhcmUgPj0gMFxuICBJbW1lZGlhdGVzIGFyZSA8IDBcblxuICBUcnVlLCBGYWxzZSwgVW5kZWZpbmVkIGFuZCBOdWxsIGFyZSBwdXNoZWQgYXMgaGFuZGxlcyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsXG4gIHdpdGggd2VsbCBrbm93biBoYW5kbGVzICgwLCAxLCAyLCAzKVxuXG4gIFRoZSBuZWdhdGl2ZSBzcGFjZSBpcyBkaXZpZGVkIGludG8gcG9zaXRpdmVzIGFuZCBuZWdhdGl2ZXMuIFBvc2l0aXZlcyBhcmVcbiAgaGlnaGVyIG51bWJlcnMgKC0xLCAtMiwgLTMsIGV0YyksIG5lZ2F0aXZlcyBhcmUgbG93ZXIuXG5cbiAgV2Ugb25seSBlbmNvZGUgaW1tZWRpYXRlcyBmb3IgdHdvIHJlYXNvbnM6XG5cbiAgMS4gVG8gdHJhbnNmZXIgb3ZlciB0aGUgd2lyZSwgc28gdGhleSdyZSBzbWFsbGVyIGluIGdlbmVyYWxcbiAgMi4gV2hlbiBwdXNoaW5nIHZhbHVlcyBvbnRvIHRoZSBzdGFjayBmcm9tIHRoZSBsb3cgbGV2ZWwvaW5uZXIgVk0sIHdoaWNoIG1heVxuICAgICBiZSBjb252ZXJ0ZWQgaW50byBXQVNNIG9uZSBkYXkuXG5cbiAgVGhpcyBhbGxvd3MgdGhlIGxvdy1sZXZlbCBWTSB0byBhbHdheXMgdXNlIFNNSXMsIGFuZCB0byBtaW5pbWl6ZSB1c2luZyBKU1xuICB2YWx1ZXMgdmlhIGhhbmRsZXMgZm9yIHRoaW5ncyBsaWtlIHRoZSBzdGFjayBwb2ludGVyIGFuZCBmcmFtZSBwb2ludGVyLlxuICBFeHRlcm5hbGx5LCBtb3N0IGNvZGUgcHVzaGVzIHZhbHVlcyBhcyBKUyB2YWx1ZXMsIGV4Y2VwdCB3aGVuIGJlaW5nIHB1bGxlZFxuICBmcm9tIHRoZSBhcHBlbmQgYnl0ZSBjb2RlIHdoZXJlIGl0IHdhcyBhbHJlYWR5IGVuY29kZWQuXG5cbiAgTG9naWNhbGx5LCB0aGlzIGlzIGJlY2F1c2UgdGhlIGxvdyBsZXZlbCBWTSBkb2Vzbid0IHJlYWxseSBjYXJlIGFib3V0IHRoZXNlXG4gIGhpZ2hlciBsZXZlbCB2YWx1ZXMuIEZvciBpbnN0YW5jZSwgdGhlIHJlc3VsdCBvZiBhIHVzZXJsYW5kIGhlbHBlciBtYXkgYmUgYVxuICBudW1iZXIsIG9yIGEgYm9vbGVhbiwgb3IgdW5kZWZpbmVkL251bGwsIGJ1dCBpdCdzIGV4dHJhIHdvcmsgdG8gZmlndXJlIHRoYXRcbiAgb3V0IGFuZCBwdXNoIGl0IGNvcnJlY3RseSwgdnMuIGp1c3QgcHVzaGluZyB0aGUgdmFsdWUgYXMgYSBKUyB2YWx1ZSB3aXRoIGFcbiAgaGFuZGxlLlxuXG4gIE5vdGU6IFRoZSBkZXRhaWxzIGNvdWxkIGNoYW5nZSBoZXJlIGluIHRoZSBmdXR1cmUsIHRoaXMgaXMganVzdCB0aGUgY3VycmVudFxuICBzdHJhdGVneS5cbiovXG5cbmV4cG9ydCBjb25zdCBlbnVtIEltbWVkaWF0ZUNvbnN0YW50cyB7XG4gIE1BWF9TTUkgPSAyICoqIDMwIC0gMSxcbiAgTUlOX1NNSSA9IH5NQVhfU01JLFxuICBTSUdOX0JJVCA9IH4oMiAqKiAyOSksXG4gIE1BWF9JTlQgPSB+U0lHTl9CSVQgLSAxLFxuICBNSU5fSU5UID0gfk1BWF9JTlQsXG5cbiAgRkFMU0VfSEFORExFID0gMCxcbiAgVFJVRV9IQU5ETEUgPSAxLFxuICBOVUxMX0hBTkRMRSA9IDIsXG4gIFVOREVGSU5FRF9IQU5ETEUgPSAzLFxuXG4gIEVOQ09ERURfRkFMU0VfSEFORExFID0gRkFMU0VfSEFORExFLFxuICBFTkNPREVEX1RSVUVfSEFORExFID0gVFJVRV9IQU5ETEUsXG4gIEVOQ09ERURfTlVMTF9IQU5ETEUgPSBOVUxMX0hBTkRMRSxcbiAgRU5DT0RFRF9VTkRFRklORURfSEFORExFID0gVU5ERUZJTkVEX0hBTkRMRSxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSGFuZGxlKHZhbHVlOiBudW1iZXIpIHtcbiAgcmV0dXJuIHZhbHVlID49IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vblByaW1pdGl2ZUhhbmRsZSh2YWx1ZTogbnVtYmVyKSB7XG4gIHJldHVybiB2YWx1ZSA+IEltbWVkaWF0ZUNvbnN0YW50cy5FTkNPREVEX1VOREVGSU5FRF9IQU5ETEU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdGFudHMoLi4udmFsdWVzOiB1bmtub3duW10pOiB1bmtub3duW10ge1xuICByZXR1cm4gW2ZhbHNlLCB0cnVlLCBudWxsLCB1bmRlZmluZWQsIC4uLnZhbHVlc107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NtYWxsSW50KHZhbHVlOiBudW1iZXIpIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAlIDEgPT09IDAgJiYgdmFsdWUgPD0gSW1tZWRpYXRlQ29uc3RhbnRzLk1BWF9JTlQgJiYgdmFsdWUgPj0gSW1tZWRpYXRlQ29uc3RhbnRzLk1JTl9JTlRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU5lZ2F0aXZlKG51bTogbnVtYmVyKSB7XG4gIGlmIChMT0NBTF9ERUJVRykge1xuICAgIGFzc2VydChcbiAgICAgIG51bSAlIDEgPT09IDAgJiYgbnVtID49IEltbWVkaWF0ZUNvbnN0YW50cy5NSU5fSU5UICYmIG51bSA8IDAsXG4gICAgICBgQ291bGQgbm90IGVuY29kZSBuZWdhdGl2ZTogJHtudW19YFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbnVtICYgSW1tZWRpYXRlQ29uc3RhbnRzLlNJR05fQklUO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlTmVnYXRpdmUobnVtOiBudW1iZXIpIHtcbiAgaWYgKExPQ0FMX0RFQlVHKSB7XG4gICAgYXNzZXJ0KFxuICAgICAgbnVtICUgMSA9PT0gMCAmJiBudW0gPCB+SW1tZWRpYXRlQ29uc3RhbnRzLk1BWF9JTlQgJiYgbnVtID49IEltbWVkaWF0ZUNvbnN0YW50cy5NSU5fU01JLFxuICAgICAgYENvdWxkIG5vdCBkZWNvZGUgbmVnYXRpdmU6ICR7bnVtfWBcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG51bSB8IH5JbW1lZGlhdGVDb25zdGFudHMuU0lHTl9CSVQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVQb3NpdGl2ZShudW06IG51bWJlcikge1xuICBpZiAoTE9DQUxfREVCVUcpIHtcbiAgICBhc3NlcnQoXG4gICAgICBudW0gJSAxID09PSAwICYmIG51bSA+PSAwICYmIG51bSA8PSBJbW1lZGlhdGVDb25zdGFudHMuTUFYX0lOVCxcbiAgICAgIGBDb3VsZCBub3QgZW5jb2RlIHBvc2l0aXZlOiAke251bX1gXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB+bnVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlUG9zaXRpdmUobnVtOiBudW1iZXIpIHtcbiAgaWYgKExPQ0FMX0RFQlVHKSB7XG4gICAgYXNzZXJ0KFxuICAgICAgbnVtICUgMSA9PT0gMCAmJiBudW0gPD0gMCAmJiBudW0gPj0gfkltbWVkaWF0ZUNvbnN0YW50cy5NQVhfSU5ULFxuICAgICAgYENvdWxkIG5vdCBkZWNvZGUgcG9zaXRpdmU6ICR7bnVtfWBcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIH5udW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVIYW5kbGUobnVtOiBudW1iZXIpIHtcbiAgaWYgKExPQ0FMX0RFQlVHKSB7XG4gICAgYXNzZXJ0KFxuICAgICAgbnVtICUgMSA9PT0gMCAmJiBudW0gPj0gMCAmJiBudW0gPD0gSW1tZWRpYXRlQ29uc3RhbnRzLk1BWF9TTUksXG4gICAgICBgQ291bGQgbm90IGVuY29kZSBoYW5kbGU6ICR7bnVtfWBcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG51bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUhhbmRsZShudW06IG51bWJlcikge1xuICBpZiAoTE9DQUxfREVCVUcpIHtcbiAgICBhc3NlcnQoXG4gICAgICBudW0gJSAxID09PSAwICYmIG51bSA8PSBJbW1lZGlhdGVDb25zdGFudHMuTUFYX1NNSSAmJiBudW0gPj0gMCxcbiAgICAgIGBDb3VsZCBub3QgZGVjb2RlIGhhbmRsZTogJHtudW19YFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbnVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlSW1tZWRpYXRlKG51bTogbnVtYmVyKSB7XG4gIG51bSB8PSAwO1xuICByZXR1cm4gbnVtIDwgMCA/IGVuY29kZU5lZ2F0aXZlKG51bSkgOiBlbmNvZGVQb3NpdGl2ZShudW0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlSW1tZWRpYXRlKG51bTogbnVtYmVyKSB7XG4gIG51bSB8PSAwO1xuICByZXR1cm4gbnVtID4gSW1tZWRpYXRlQ29uc3RhbnRzLlNJR05fQklUID8gZGVjb2RlUG9zaXRpdmUobnVtKSA6IGRlY29kZU5lZ2F0aXZlKG51bSk7XG59XG5cbi8vIFdhcm1cblsxLCAyLCAzXS5mb3JFYWNoKCh4KSA9PiBkZWNvZGVIYW5kbGUoZW5jb2RlSGFuZGxlKHgpKSk7XG5bMSwgLTFdLmZvckVhY2goKHgpID0+IGRlY29kZUltbWVkaWF0ZShlbmNvZGVJbW1lZGlhdGUoeCkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=
\No newline at end of file