Skip to content

Commit 0fe8aa6

Browse files
authored
fix(runtime): Handle bigint mul/div within Number correctly (#1475)
1 parent d705849 commit 0fe8aa6

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

compiler/test/stdlib/number.test.gr

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ assert Number.isNaN(Number.sub(Number.nan, Number.nan))
5454
}
5555
// mul
5656
assert Number.mul(5, 5) == 25
57+
assert Number.mul(9223372036854775809, 5) == 46116860184273879045
58+
assert Number.mul(9223372036854775809, 9223372036854775809) ==
59+
85070591730234615884290395931651604481
5760
assert Number.mul(Number.infinity, 10) == Number.infinity
5861
assert Number.mul(Number.infinity, Number.infinity) == Number.infinity
5962
assert Number.isNaN(Number.mul(Number.infinity, Number.nan))
@@ -72,6 +75,8 @@ assert Number.isNaN(Number.mul(Number.nan, Number.nan))
7275
}
7376
// div
7477
assert Number.div(25, 5) == 5
78+
assert Number.div(9223372036854775809, 9) == 1024819115206086201
79+
assert Number.div(9223372036854775809, 9223372036854775809) == 1
7580
assert Number.div(Number.infinity, 10) == Number.infinity
7681
assert Number.isNaN(Number.div(Number.infinity, Number.infinity))
7782
assert Number.isNaN(Number.div(Number.infinity, Number.nan))

stdlib/runtime/numbers.gr

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1424,6 +1424,13 @@ let numberTimesDivideBigIntHelp = (x, y, isDivide) => {
14241424
Memory.decRef(yBig)
14251425
ret
14261426
},
1427+
t when WasmI32.eq(t, Tags._GRAIN_BIGINT_BOXED_NUM_TAG) => {
1428+
if (isDivide) {
1429+
reducedBigInteger(BI.div(x, y))
1430+
} else {
1431+
reducedBigInteger(BI.mul(x, y))
1432+
}
1433+
},
14271434
t when WasmI32.eq(t, Tags._GRAIN_RATIONAL_BOXED_NUM_TAG) => {
14281435
let yNumerator = boxedRationalNumerator(y)
14291436
let yDenominator = boxedRationalDenominator(y)

0 commit comments

Comments
 (0)