[squeak-dev] stepping over non local return in a protected block
m at jaromir.net
Wed May 12 18:48:19 UTC 2021
Hi Nicolas, Christoph, all
> When debugging things like this:
> [^2] ensure: [Transcript cr; show: 'done'].
> if we step into the protected block [^2], then step over ^2, we
> incorrectly get a BlockCannotReturn.
Found a bug inside the debugger causing this problem: #stepOver uses
#runUntilErrorOrReturnFrom: which inserts an ensure context when started.
The problem happens when the debugger simulates #aboutToReturn:through: --
before it starts executing it via #runUntilErrorOrReturnFrom this method
inserts its ensure context between #aboutToReturn:through:firstUnwindContext
and its firstUnwindContext argument! This means the inserted context will be
skipped during execution and that's the whole problem :)
The situation is captured on the enclosed screenshot.
To prove this try changing #aboutToReturn and the BlockCannotReturn error is
#aboutToReturn: result through: firstUnwindContext
"Called from VM when an unwindBlock is found between self and its home.
Return to home's sender, executing unwind blocks on the way."
self methodReturnContext return: result
I'm not sure how to fix it but a debugger pro should figure it out way
faster than me :)
Sent from: http://forum.world.st/Squeak-Dev-f45488.html
More information about the Squeak-dev