Naive fix for #21708
This fixes #21708 (closed) by reimplementing keepAlive#
as an out-of-line primop which manually pushes a stack frame, essentially reverting to Option (A) as described on the wiki page. This is not particularly efficient but is more robust than the previous implementation in terms of touch#
.
Future work
We can further optimise this approach by implementing #16098 and teaching the code generator to inline the frame push (Option C). This would allow us to avoid the construction of the continuation closure and the associated calls.
Edited by Ben Gamari