alan-js-runtime
Advanced tools
Comparing version 0.1.26 to 0.1.27
194
index.js
@@ -19,3 +19,3 @@ require('cross-fetch/polyfill') | ||
const INT64MAX = 2n ** 63n - 1n | ||
const INT64MIN = -(2n ** 31n) | ||
const INT64MIN = -(2n ** 63n) | ||
@@ -175,5 +175,5 @@ // Hashing opcodes (hashv is recursive, needs to be defined outside of the export object) | ||
const b = rb[1] | ||
if (a > 0 && b > 0 && a > INT8MAX - b) return [0, 'overflow'] | ||
if (a < 0 && b < 0 && a < INT8MIN - b) return [0, 'underflow'] | ||
return [1, a + b] | ||
if (a > 0 && b > 0 && a > INT8MAX - b) return [false, 'overflow'] | ||
if (a < 0 && b < 0 && a < INT8MIN - b) return [false, 'underflow'] | ||
return [true, a + b] | ||
}, | ||
@@ -185,5 +185,5 @@ addi16: (ra, rb) => { | ||
const b = rb[1] | ||
if (a > 0 && b > 0 && a > INT16MAX - b) return [0, 'overflow'] | ||
if (a < 0 && b < 0 && a < INT16MIN - b) return [0, 'underflow'] | ||
return [1, a + b] | ||
if (a > 0 && b > 0 && a > INT16MAX - b) return [false, 'overflow'] | ||
if (a < 0 && b < 0 && a < INT16MIN - b) return [false, 'underflow'] | ||
return [true, a + b] | ||
}, | ||
@@ -195,5 +195,5 @@ addi32: (ra, rb) => { | ||
const b = rb[1] | ||
if (a > 0 && b > 0 && a > INT32MAX - b) return [0, 'overflow'] | ||
if (a < 0 && b < 0 && a < INT32MIN - b) return [0, 'underflow'] | ||
return [1, a + b] | ||
if (a > 0 && b > 0 && a > INT32MAX - b) return [false, 'overflow'] | ||
if (a < 0 && b < 0 && a < INT32MIN - b) return [false, 'underflow'] | ||
return [true, a + b] | ||
}, | ||
@@ -205,5 +205,5 @@ addi64: (ra, rb) => { | ||
const b = rb[1] | ||
if (a > 0n && b > 0n && a > INT64MAX - b) return [0, 'overflow'] | ||
if (a < 0n && b < 0n && a < INT64MIN - b) return [0, 'underflow'] | ||
return [1, a + b] | ||
if (a > 0n && b > 0n && a > INT64MAX - b) return [false, 'overflow'] | ||
if (a < 0n && b < 0n && a < INT64MIN - b) return [false, 'underflow'] | ||
return [true, a + b] | ||
}, | ||
@@ -216,5 +216,5 @@ addf32: (ra, rb) => { | ||
const out = a + b | ||
if (out === Number.POSITIVE_INFINITY) return [0, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [0, 'underflow'] | ||
return [1, out] | ||
if (out === Number.POSITIVE_INFINITY) return [false, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [false, 'underflow'] | ||
return [true, out] | ||
}, | ||
@@ -227,5 +227,5 @@ addf64: (ra, rb) => { | ||
const out = a + b | ||
if (out === Number.POSITIVE_INFINITY) return [0, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [0, 'underflow'] | ||
return [1, out] | ||
if (out === Number.POSITIVE_INFINITY) return [false, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [false, 'underflow'] | ||
return [true, out] | ||
}, | ||
@@ -238,5 +238,5 @@ | ||
const b = rb[1] | ||
if (a > 0 && b < 0 && a > INT8MAX + b) return [0, 'overflow'] | ||
if (a < 0 && b > 0 && a < INT8MIN + b) return [0, 'underflow'] | ||
return [1, a - b] | ||
if (a > 0 && b < 0 && a > INT8MAX + b) return [false, 'overflow'] | ||
if (a < 0 && b > 0 && a < INT8MIN + b) return [false, 'underflow'] | ||
return [true, a - b] | ||
}, | ||
@@ -248,5 +248,5 @@ subi16: (ra, rb) => { | ||
const b = rb[1] | ||
if (a > 0 && b < 0 && a > INT16MAX + b) return [0, 'overflow'] | ||
if (a < 0 && b > 0 && a < INT16MIN + b) return [0, 'underflow'] | ||
return [1, a - b] | ||
if (a > 0 && b < 0 && a > INT16MAX + b) return [false, 'overflow'] | ||
if (a < 0 && b > 0 && a < INT16MIN + b) return [false, 'underflow'] | ||
return [true, a - b] | ||
}, | ||
@@ -258,5 +258,5 @@ subi32: (ra, rb) => { | ||
const b = rb[1] | ||
if (a > 0 && b < 0 && a > INT32MAX + b) return [0, 'overflow'] | ||
if (a < 0 && b > 0 && a < INT32MIN + b) return [0, 'underflow'] | ||
return [1, a - b] | ||
if (a > 0 && b < 0 && a > INT32MAX + b) return [false, 'overflow'] | ||
if (a < 0 && b > 0 && a < INT32MIN + b) return [false, 'underflow'] | ||
return [true, a - b] | ||
}, | ||
@@ -268,5 +268,5 @@ subi64: (ra, rb) => { | ||
const b = rb[1] | ||
if (a > 0n && b < 0n && a > INT32MAX + b) return [0, 'overflow'] | ||
if (a < 0n && b > 0n && a < INT32MIN + b) return [0, 'underflow'] | ||
return [1, a - b] | ||
if (a > 0n && b < 0n && a > INT32MAX + b) return [false, 'overflow'] | ||
if (a < 0n && b > 0n && a < INT32MIN + b) return [false, 'underflow'] | ||
return [true, a - b] | ||
}, | ||
@@ -279,5 +279,5 @@ subf32: (ra, rb) => { | ||
const out = a - b | ||
if (out === Number.POSITIVE_INFINITY) return [0, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [0, 'underflow'] | ||
return [1, out] | ||
if (out === Number.POSITIVE_INFINITY) return [false, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [false, 'underflow'] | ||
return [true, out] | ||
}, | ||
@@ -290,5 +290,5 @@ subf64: (ra, rb) => { | ||
const out = a - b | ||
if (out === Number.POSITIVE_INFINITY) return [0, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [0, 'underflow'] | ||
return [1, out] | ||
if (out === Number.POSITIVE_INFINITY) return [false, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [false, 'underflow'] | ||
return [true, out] | ||
}, | ||
@@ -315,5 +315,5 @@ | ||
const b = rb[1] | ||
if (a > 0 && b > 0 && a > INT8MAX / b) return [0, 'overflow'] | ||
if (a < 0 && b < 0 && a < INT8MIN / b) return [0, 'underflow'] | ||
return [1, a * b] | ||
if (a > 0 && b > 0 && a > INT8MAX / b) return [false, 'overflow'] | ||
if (a < 0 && b < 0 && a < INT8MIN / b) return [false, 'underflow'] | ||
return [true, a * b] | ||
}, | ||
@@ -325,5 +325,5 @@ muli16: (ra, rb) => { | ||
const b = rb[1] | ||
if (a > 0 && b > 0 && a > INT16MAX / b) return [0, 'overflow'] | ||
if (a < 0 && b < 0 && a < INT16MIN / b) return [0, 'underflow'] | ||
return [1, a * b] | ||
if (a > 0 && b > 0 && a > INT16MAX / b) return [false, 'overflow'] | ||
if (a < 0 && b < 0 && a < INT16MIN / b) return [false, 'underflow'] | ||
return [true, a * b] | ||
}, | ||
@@ -335,5 +335,5 @@ muli32: (ra, rb) => { | ||
const b = rb[1] | ||
if (a > 0 && b > 0 && a > INT32MAX / b) return [0, 'overflow'] | ||
if (a < 0 && b < 0 && a < INT32MIN / b) return [0, 'underflow'] | ||
return [1, a * b] | ||
if (a > 0 && b > 0 && a > INT32MAX / b) return [false, 'overflow'] | ||
if (a < 0 && b < 0 && a < INT32MIN / b) return [false, 'underflow'] | ||
return [true, a * b] | ||
}, | ||
@@ -345,5 +345,5 @@ muli64: (ra, rb) => { | ||
const b = rb[1] | ||
if (a > 0n && b > 0n && a > INT64MAX / b) return [0, 'overflow'] | ||
if (a < 0n && b < 0n && a < INT64MIN / b) return [0, 'underflow'] | ||
return [1, a * b] | ||
if (a > 0n && b > 0n && a > INT64MAX / b) return [false, 'overflow'] | ||
if (a < 0n && b < 0n && a < INT64MIN / b) return [false, 'underflow'] | ||
return [true, a * b] | ||
}, | ||
@@ -356,5 +356,5 @@ mulf32: (ra, rb) => { | ||
const out = a * b | ||
if (out === Number.POSITIVE_INFINITY) return [0, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [0, 'underflow'] | ||
return [1, out] | ||
if (out === Number.POSITIVE_INFINITY) return [false, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [false, 'underflow'] | ||
return [true, out] | ||
}, | ||
@@ -367,5 +367,5 @@ mulf64: (ra, rb) => { | ||
const out = a * b | ||
if (out === Number.POSITIVE_INFINITY) return [0, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [0, 'underflow'] | ||
return [1, out] | ||
if (out === Number.POSITIVE_INFINITY) return [false, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [false, 'underflow'] | ||
return [true, out] | ||
}, | ||
@@ -378,4 +378,4 @@ | ||
const b = rb[1] | ||
if (b === 0) return [0, 'divide-by-zero'] | ||
return [1, Math.floor(a / b)] | ||
if (b === 0) return [false, 'divide-by-zero'] | ||
return [true, Math.floor(a / b)] | ||
}, | ||
@@ -387,4 +387,4 @@ divi16: (ra, rb) => { | ||
const b = rb[1] | ||
if (b === 0) return [0, 'divide-by-zero'] | ||
return [1, Math.floor(a / b)] | ||
if (b === 0) return [false, 'divide-by-zero'] | ||
return [true, Math.floor(a / b)] | ||
}, | ||
@@ -396,4 +396,4 @@ divi32: (ra, rb) => { | ||
const b = rb[1] | ||
if (b === 0) return [0, 'divide-by-zero'] | ||
return [1, Math.floor(a / b)] | ||
if (b === 0) return [false, 'divide-by-zero'] | ||
return [true, Math.floor(a / b)] | ||
}, | ||
@@ -405,4 +405,4 @@ divi64: (ra, rb) => { | ||
const b = rb[1] | ||
if (b === 0n) return [0, 'divide-by-zero'] | ||
return [1, a / b] | ||
if (b === 0n) return [false, 'divide-by-zero'] | ||
return [true, a / b] | ||
}, | ||
@@ -414,7 +414,7 @@ divf32: (ra, rb) => { | ||
const b = rb[1] | ||
if (b === 0.0) return [0, 'divide-by-zero'] | ||
if (b === 0.0) return [false, 'divide-by-zero'] | ||
const out = a / b | ||
if (out === Number.POSITIVE_INFINITY) return [0, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [0, 'underflow'] | ||
return [1, out] | ||
if (out === Number.POSITIVE_INFINITY) return [false, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [false, 'underflow'] | ||
return [true, out] | ||
}, | ||
@@ -426,7 +426,7 @@ divf64: (ra, rb) => { | ||
const b = rb[1] | ||
if (b === 0.0) return [0, 'divide-by-zero'] | ||
if (b === 0.0) return [false, 'divide-by-zero'] | ||
const out = a / b | ||
if (out === Number.POSITIVE_INFINITY) return [0, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [0, 'underflow'] | ||
return [1, out] | ||
if (out === Number.POSITIVE_INFINITY) return [false, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [false, 'underflow'] | ||
return [true, out] | ||
}, | ||
@@ -444,5 +444,5 @@ | ||
const b = rb[1] | ||
if (a > 0 && b > 1 && a > INT8MAX ** (1 / b)) return [0, 'overflow'] | ||
if (a < 0 && b > 1 && a < INT8MIN ** (1 / b)) return [0, 'underflow'] | ||
return [1, Math.floor(a ** b)] | ||
if (a > 0 && b > 1 && a > INT8MAX ** (1 / b)) return [false, 'overflow'] | ||
if (a < 0 && b > 1 && a < INT8MIN ** (1 / b)) return [false, 'underflow'] | ||
return [true, Math.floor(a ** b)] | ||
}, | ||
@@ -454,5 +454,5 @@ powi16: (ra, rb) => { | ||
const b = rb[1] | ||
if (a > 0 && b > 1 && a > INT16MAX ** (1 / b)) return [0, 'overflow'] | ||
if (a < 0 && b > 1 && a < INT16MIN ** (1 / b)) return [0, 'underflow'] | ||
return [1, Math.floor(a ** b)] | ||
if (a > 0 && b > 1 && a > INT16MAX ** (1 / b)) return [false, 'overflow'] | ||
if (a < 0 && b > 1 && a < INT16MIN ** (1 / b)) return [false, 'underflow'] | ||
return [true, Math.floor(a ** b)] | ||
}, | ||
@@ -464,5 +464,5 @@ powi32: (ra, rb) => { | ||
const b = rb[1] | ||
if (a > 0 && b > 1 && a > INT32MAX ** (1 / b)) return [0, 'overflow'] | ||
if (a < 0 && b > 1 && a < INT32MIN ** (1 / b)) return [0, 'underflow'] | ||
return [1, Math.floor(a ** b)] | ||
if (a > 0 && b > 1 && a > INT32MAX ** (1 / b)) return [false, 'overflow'] | ||
if (a < 0 && b > 1 && a < INT32MIN ** (1 / b)) return [false, 'underflow'] | ||
return [true, Math.floor(a ** b)] | ||
}, | ||
@@ -478,3 +478,3 @@ powi64: (ra, rb) => { | ||
const maxf = parseFloat(INT64MAX.toString()) | ||
if (af > maxf ** (1 / bf)) return [0, 'overflow'] | ||
if (af > maxf ** (1 / bf)) return [false, 'overflow'] | ||
} | ||
@@ -485,5 +485,5 @@ if (a < 0n && b > 1n) { | ||
const minf = parseFloat(INT64MIN.toString()) | ||
if (af < minf ** (1 / bf)) return [0, 'underflow'] | ||
if (af < minf ** (1 / bf)) return [false, 'underflow'] | ||
} | ||
return [1, a ** b] | ||
return [true, a ** b] | ||
}, | ||
@@ -496,5 +496,5 @@ powf32: (ra, rb) => { | ||
const out = a ** b | ||
if (out === Number.POSITIVE_INFINITY) return [0, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [0, 'underflow'] | ||
return [1, out] | ||
if (out === Number.POSITIVE_INFINITY) return [false, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [false, 'underflow'] | ||
return [true, out] | ||
}, | ||
@@ -507,5 +507,5 @@ powf64: (ra, rb) => { | ||
const out = a ** b | ||
if (out === Number.POSITIVE_INFINITY) return [0, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [0, 'underflow'] | ||
return [1, out] | ||
if (out === Number.POSITIVE_INFINITY) return [false, 'overflow'] | ||
if (out === Number.NEGATIVE_INFINITY) return [false, 'underflow'] | ||
return [true, out] | ||
}, | ||
@@ -617,3 +617,3 @@ | ||
indstr: (a, b) => { | ||
const ind = a.indexOf(b) | ||
const ind = BigInt(a.indexOf(b)) | ||
return ind > -1 ? [ true, ind, ] : [ false, 'substring not found', ] | ||
@@ -650,4 +650,4 @@ }, | ||
join: (arr, sep) => arr.join(sep), | ||
map: async (arr, fn) => await Promise.all(arr.map(fn)), | ||
mapl: async (arr, fn) => await Promise.all(arr.map(fn)), | ||
map: async (arr, fn) => await Promise.all(arr.map((v, i) => fn(v, BigInt(i)))), | ||
mapl: async (arr, fn) => await Promise.all(arr.map((v, i) => fn(v, BigInt(i)))), | ||
reparr: (arr, n) => Array.from(new Array(parseInt(n.toString()) * arr.length)) | ||
@@ -658,7 +658,7 @@ .map((_, i) => typeof arr[i % arr.length] === 'bigint' ? | ||
), | ||
each: async (arr, fn) => { | ||
await Promise.all(arr.map(fn)) // Thrown away but awaited to maintain consistent execution | ||
each: async (arr, fn) => { // Thrown away but awaited to maintain consistent execution | ||
await Promise.all(arr.map((v, i) => fn(v, BigInt(i)))) | ||
}, | ||
eachl: async (arr, fn) => { | ||
await Promise.all(arr.map(fn)) // Thrown away but awaited to maintain consistent execution | ||
eachl: async (arr, fn) => { // Thrown away but awaited to maintain consistent execution | ||
await Promise.all(arr.map((v, i) => fn(v, BigInt(i)))) | ||
}, | ||
@@ -921,3 +921,3 @@ find: async (arr, fn) => { | ||
}, | ||
newseq: (limit) => [0, limit], | ||
newseq: (limit) => [0n, limit], | ||
seqnext: (seq) => { | ||
@@ -924,0 +924,0 @@ if (seq[0] < seq[1]) { |
{ | ||
"name": "alan-js-runtime", | ||
"version": "0.1.26", | ||
"version": "0.1.27", | ||
"description": "The runtime component for alan-js. Separately licensed from the compiler.", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
41497