summaryrefslogtreecommitdiffstats
path: root/mpi-patches/mpi-to-double
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2025-06-19 21:50:21 -0700
committerKaz Kylheku <kaz@kylheku.com>2025-06-19 21:50:21 -0700
commitb9c980f9f34b8fd35af75845f0df7669c9b8b4b3 (patch)
treefd280b59adb147b36b1efadc84c046d359f76937 /mpi-patches/mpi-to-double
parent2e88bbd9618079a4bb2cd539a2c9856a1ef13b39 (diff)
downloadtxr-b9c980f9f34b8fd35af75845f0df7669c9b8b4b3.tar.gz
txr-b9c980f9f34b8fd35af75845f0df7669c9b8b4b3.tar.bz2
txr-b9c980f9f34b8fd35af75845f0df7669c9b8b4b3.zip
compiler: block escape list.
The new dynamic variable *esc-blocks* keeps track of what blocks, in a given scope, may be abandoned by a simple jmp instruction instead of a full blown dynamic return. We will not try to handle unwinding statically; any contour that needs unwinding cannot be jumped across. * stdlib/compiler.tl (*esc-blocks*): New special variable. (compile-in-top-level): Clear *esc-blocks* for top-level compilations. (compiler (comp-unwind-protect, comp-catch, comp-lambda-impl, comp-prof): These contexts cannot be abandoned by a jmp instruction: we cannot jump out of the middle of an unwind-protect, catch, lambda or prof. So we compile these with *esc-blocks* set to nil. New blocks entirely contained in these constructs can of course build up the list locally. E.g. within a function, of course we can have blocks that are abandoned by a simple jmp instruction. Just we cannot jump out. (compiler comp-block): When compiling a block, we bind *esc-blocks* to a list consisting of the previous value, plus the new block name consed to the front.
Diffstat (limited to 'mpi-patches/mpi-to-double')
0 files changed, 0 insertions, 0 deletions