In the debugger, yellow-click UndefinedObject>>DoIt (home), choose "return entered value", and enter any value.
Expected: Should land in UndefinedObject(Object)>>halt. Actual: Land in Compiler>>evaluateCue:ifFail:logged: (but the process suspendedContext is not actually yet there). Patch:
Debugger>>returnValue
"Force a return of a given value to the previous context!"
- | previous selectedContext expression value |
+ | previous selectedContext expression value newContext |
contextStackIndex = 0 ifTrue: [^Beeper beep].
selectedContext := self selectedContext.
expression := UIManager default request: 'Enter expression for return value:'.
value := Compiler new
evaluate: expression
in: selectedContext
to: selectedContext receiver.
previous := selectedContext sender.
- self resetContext: previous.
- interruptedProcess popTo: previous value: value
+ newContext := self
+ handleLabelUpdatesIn: [interruptedProcess popTo: previous value: value]
+ whenExecuting: previous.
+ self resetContext: newContext. "might differ from previous in case of error during unwinding"
With that change, let's continue and step out of [] in UndefinedObject>>DoIt. Whether you use step over or step through from UndefinedObject>>DoIt or step into all the details of the unwind stack, in any case the process ends up completely terminated before the debugger halts in Compiler>>evaluateCue:ifFail:logged: as expected, and you get anything like disabled stepping buttons in the debugger, a cannotReturn: error, or a nil DNU from the debugger.
Something seems to be wrong with the unwinding logic here. I checked: This is not a regression and already failed in 6.0 and 5.3.
@isCzech FYIO, just in case you're up for another round of unwinding fun. Otherwise, I might myself address this one day. :-)
Steps to reproduce
Do it/print it:
In the debugger, yellow-click
UndefinedObject>>DoIt
(home), choose "return entered value", and enter any value.Expected: Should land in
UndefinedObject(Object)>>halt
.Actual: Land in
Compiler>>evaluateCue:ifFail:logged:
(but the process suspendedContext is not actually yet there).Patch:
With that change, let's continue and step out of
[] in UndefinedObject>>DoIt
. Whether you use step over or step through fromUndefinedObject>>DoIt
or step into all the details of the unwind stack, in any case the process ends up completely terminated before the debugger halts inCompiler>>evaluateCue:ifFail:logged:
as expected, and you get anything like disabled stepping buttons in the debugger, a cannotReturn: error, or a nil DNU from the debugger.Something seems to be wrong with the unwinding logic here. I checked: This is not a regression and already failed in 6.0 and 5.3.
@isCzech FYIO, just in case you're up for another round of unwinding fun. Otherwise, I might myself address this one day. :-)