-
7f030f76
by Sylvain Henry at 2026-07-27T18:52:57+05:30
JS: fix array index for registers
We used to store R32 in h$regs[-1]. While it's correct in JavaScript,
fix this to store R32 in h$regs[0] instead.
(cherry picked from commit c9fa3449d78f4fe690acf26a57b1e338a2d580da)
-
2ee8bc10
by Sylvain Henry at 2026-07-27T18:52:57+05:30
JS: support more than 128 registers (#26558)
The JS backend only supported 128 registers (JS variables/array slots
used to pass function arguments). It failed in T26537 when 129
registers were required.
This commit adds support for more than 128 registers: it is now limited to
maxBound :: Int (compiler's Int). If we ever go above this threshold the
compiler now panics with a more descriptive message.
A few built-in JS functions were assuming 128 registers and have been
rewritten to use loops. Note that loops are only used for "high"
registers that are stored in an array: the 31 "low" registers are still
handled with JS global variables and with explicit switch-cases to
maintain good performance in the most common cases (i.e. few registers
used). Adjusting the number of low registers is now easy: just one
constant to adjust (GHC.StgToJS.Regs.lowRegsCount).
No new test added: T26537 is used as a regression test instead.
(cherry picked from commit 9e46990976193d71686b070cd4c5d9c7aad43cf2)
-
f817f41a
by Andreas Klebinger at 2026-07-27T18:52:57+05:30
testsuite: Explicitly use utf-8 encoding in rts-includes linter.
Not doing so caused failures on windows, as python failed to pick a
reasonable encoding even with locale set.
Fixes #26850
(cherry picked from commit 01ecb61234b03b94d08ab649395e2da074a4f9d3)
-
433fe334
by Zubin Duggal at 2026-07-27T18:52:57+05:30
UniqueDFM: alter should preserve insertion order
Before it always inserting new elements at the end.
This is problematic because instances get inserted into the map with
`alterF`, which can change ordering of how instances are printed
with `:info` depending on the order in which we consult interfaces
I expect `alter id k = id` and `alter (fmap f) k = adjust f k`. Moving keys to
the end breaks that (`adjust` already preserves position).
Fixes #27532
(cherry picked from commit f6f2343fbbfdfd8aaed9babf5983e3e24c08ca85)
-
a2bb9069
by Zubin Duggal at 2026-07-27T18:52:57+05:30
Prepare 9.14.2
Bump filpath submodule to 1.5.5.0
Bump Win32 submodule to 2.14.2.2
Metric Increase:
T4029
T13379
Metric Decrease:
T5030