In Rebol 1.0, there's something called SHIELD:
shield before-block main-block after-block
Shield a block from catch and other types of exception handling, allowing it to take the necessary steps to initialize and finalize its state.
print catch 'throw [ shield [ print "entering" ][ repeat n 10 [if n > 5 [throw "thrown out"]] ][ print "exiting" ] ]
This will output:
entering exiting thrown out
It might seem unclear as to why you would need to have a "before-block" instead of just writing your code before the call to SHIELD. But Rebol 1.0 is very function-driven. So:
(before-code shield main-block after-block)
...would be a GROUP! instead of a single function call, and I believe the thinking was more that if it was a function that it would "fit in more slots" where a GROUP! would complicate things. (?)
Anyway...this category of things is still a functionality gap in Ren-C, because all you can do is trap and rescue and catch things...and you have to care about whether you're catching or trapping, and you have to rethrow or re-fail. Things like SHIELD and DEFER are all trivial to implement, but it's just not certain what the right way to get constructor/destructor type behaviors is in this language.