[squeak-dev] Re: Is this a bug with Step "Over"?
Eliot Miranda
eliot.miranda at gmail.com
Tue Jun 23 16:37:45 UTC 2015
Hi Marcel,
On Jun 23, 2015, at 2:44 AM, "marcel.taeumel" <Marcel.Taeumel at hpi.de> wrote:
> Hi, all.
>
> I understood the changed behavior. Eliot is right, we need to update Warning
>>> #defaultAction so that it behaves like Halt >> #defaultAction. Let me
> explain why...
>
> What is an Exception? An abstract base class for the exception handling
> system.
> What is an Error? A non-resumable exception.
> What is a Notification? A resumable exception that does not raise a debugger
> if unhandled.
> What is a Halt? A resumable exception that does raise a debugger if
> unhandled.
>
> ---
>
> So what is a Warning? Actually in 4.5, warnings behave just like Halt, that
> is, as resumable exceptions that do raise debuggers if unhandled. In 4.6,
> this still works for normally executed ("do-it") code but not in the
> debugger.
>
> Why is that?
>
> We just extended "Processor activeProcess" to return the effective process,
> which is different to the active one while debugging due to Process >>
> #evaluate:onBehalfOf:, to support debugging process-local state. This is
> fine.
>
> What changed from 4.5 to 4.6 in the control flow of Warning >>
> #defaultAction?
>
> Eventually, we get to MorphicProject >> #spawnNewProcessIfThisIsUI. But now
> in 4.6, the comparison is *false when debugging* and hence *we do not spawn
> a new UI process*. Until then in 4.5, this spawning of a new UI process
> cleaned up debugger stuff in the current stack (see Debugger >>
> #informExistingDebugger:label:) and thus also *dropped the current progress
> of step-over*!
>
> What was the current progress of step-over? Well, our example is this:
>
> 3 timesRepeat: [Warning signal].
> Transcript showln: 10 factorial.
>
> We want to step-over the #timesRepeat: call. Now go see Warning >>
> #defaultAction:
>
> defaultAction
> ToolSet
> debugContext: thisContext
> label: 'Warning'
> contents: self messageText, '\\Select Proceed to continue, or close this
> window to cancel the operation.' withCRs.
> self resume.
>
> What we do not execute anymore if we spawn a new UI process -- due to the
> clean-up of the debugger stack -- is "self resume." That call just removes
> the Warning's calls from the stack. Thus, we keep going in the surrounding
> step-over progress and get all warnings at once.
>
> In a nutshell, the current implementation of Warning >> #defaultAction
> exploits a very nasty side-effect in 4.5 (even a buggy one), which got
> finally fixed in 4.6 when we started evaluating code on behalf of another
> process.
>
> ---
>
> Warning and Halt behave exactly the same. We should make Warning a subclass
> of Halt and extend the message text as in its current #default action.
> Warnings *are no* Notifications. They never were.
>
> Any objections?
Quite the opposite. Let us make it so.
>
> Best,
> Marcel
>
>
>
> --
> View this message in context: http://forum.world.st/Is-this-a-bug-with-Step-Over-tp4830736p4833652.html
> Sent from the Squeak - Dev mailing list archive at Nabble.com.
>
More information about the Squeak-dev
mailing list
|