Marcus, On Fri, Jun 17, 2016 at 4:03 AM, Marcus Denker <[email protected]> wrote:
> > > On 14 Jun 2016, at 09:47, [email protected] wrote: > > > > Hi, > > > > Yesterday we improved #haltOnce to be more like a “once” BreakPoint: > > > > -> state per *each* haltOnce send > > (this means you can put two in one method and they are > independent) > > -> when putting a haltOnce, it is enabled by default > > -> The global menu entry just resets all haltOnce to be active > again. > > > > Interesting is how trivial this was to implement… in class Halt > > once > > | node | > > node := thisContext sender sender sourceNodeExecuted. > > (node hasProperty: #haltOnce) ifTrue: [^self]. > > node propertyAt: #haltOnce put: true. > > ^ self signal. > > > > > > This means, we get the AST node of the “haltOnce” message send. Then we > put an annotation there. > > haltOnCount: can be implemented using AST send-site per node state, too: > > onCount: anInteger > "Halt on the anInteger-th time through" > <debuggerCompleteToSender> > | node | > node := thisContext sender sender sourceNodeExecuted. > (node hasProperty: #haltCount) ifFalse: [ > node propertyAt: #haltCount put: 0. > ]. > node propertyAt: #haltCount put: (node propertyAt: > #haltCount) + 1. > ((node propertyAt: #haltCount) = anInteger) ifTrue: [ > ^self signal ]. > > > Marcus > Yes, but using the byte code pc is a much much cheaper key, and just as unique. _,,,^..^,,,_ best, Eliot
