On Sat, Jan 31, 2015 at 8:44 AM, Eliot Miranda <eliot.mira...@gmail.com> wrote:
> > > On Fri, Jan 30, 2015 at 2:54 PM, Sean P. DeNigris <s...@clipperadams.com> > wrote: > >> Ben Coman wrote >> > @Sean, In what way will it make halts more annoying? >> >> Clearly seems to make things better in your use case, but IIRC the purpose >> of that test is that you don't want to open the debugger within the >> halting >> system. And indeed, when you remove it, you end up in #halt. But where you >> want to be is in UndefinedObject>>DoIt. So, it seems like a hack that, >> while >> better in this case, may have implications in other cases. The solution >> we're looking for is: "debuggers-opened-due-to-halts always open on the >> first context totally outside the halt machinery" and we're not quite >> there >> yet. >> > Okay I agree. So I threw away that solution you commented on and came at it another way. In summary... * The following four statements now all operate identically * self halt. * self haltOnce. * Halt now. * Halt once. * The first time the debugger opens - the halt statement is highlighted in the method that contains it. (In addition, the several other conditional and counting halt methods in the Halt class protocol 'halting' and Object protocol '*Kernel-Exceptions-debugging' "should" also work identically - but I haven't tested them pending confirmation I'm on the right track) * Upon <Restart>, all the above statements are properly ignored by <Step Over> Consider the following now opens a debugger on line 2 and gets to line 5 in just three <Step Over>s. a := 1. self halt. b := 2. self halt. c := 3. > > Nobody responded to my suggestion of inlining the code for haltOnce so > that the Halt signal happens in haltOnce itself, just as it does inside > halt. This may make the system respond to haltOnce the same as it does to > halt. i.e. the debugger can look to the sender of the signalling context. > As it is now, the sender of the signalling context of a haltOnce is halt, > not the sender of haltOnce as desired. > > > Let me reiterate, I expect > > haltOnce > "Halt unless we have already done it once." > (Smalltalk at: #HaltOnce ifAbsent: [false]) ifTrue: > [Smalltalk at: #HaltOnce put: false. > Halt signal] > > will behave similarly to > > halt > Halt signal > > > I believe I have been successful in this. The following now opens a debugger on line 3 instead of inside the #haltOnce.... a := 1. Halt enableHaltOnce. self haltOnce. b := 2. This is all in SLICE-Issue-12970-16-steps-to-get-through-halt-BenComan.4. Now maybe its not the best implementation, but I believe it satisfies all functional requirements and please can it be reviewed for integration asap. For me this adds that much more joy to using our great debugger. cheers -ben