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

Reply via email to