On Sun, Jan 29, 2012 at 1:25 PM, St�phane Ducasse <stephane.ducasse@inria.fr> wrote:
Hi

I would like to write some tests about MethodContext and BlockClosure activation.
To start I wanted to write a simple invocation and step in from context to context.

I could manually annotate the code with thisContext and store the resulting contexts
somewhere. But does anybody has some magic information so that I can reuse the debugger logic?

ContextPart>runSimulated:atEachStep:, e.g.

| last |
last := thisContext.
thisContext runSimulated: [#(1 2 3) detect: [:e| e even]] contextAtEachStep: [:c| c ~~ last ifTrue: [Transcript print: c; cr; flush. last := c]]

=>

[] in UndefinedObject>>DoIt
Array(Collection)>>detect:
Array(Collection)>>detect:ifNone:
Array(SequenceableCollection)>>do:
[] in Array(Collection)>>detect:ifNone:
[] in [] in UndefinedObject>>DoIt
SmallInteger>>even
[] in [] in UndefinedObject>>DoIt
[] in Array(Collection)>>detect:ifNone:
Array(SequenceableCollection)>>do:
[] in Array(Collection)>>detect:ifNone:
[] in [] in UndefinedObject>>DoIt
SmallInteger>>even
[] in [] in UndefinedObject>>DoIt
[] in Array(Collection)>>detect:ifNone:
Array(Collection)>>detect:
[] in UndefinedObject>>DoIt

or...


| last home indent |
last := nil.
home := thisContext.
indent := 0.
thisContext
runSimulated: [#(1 2 3) detect: [:e| e even]]
contextAtEachStep:
[:c| | ctxt |
c ~~ last ifTrue:
[last := c.
indent := 0. ctxt := c sender.
[ctxt ~~ home] whileTrue:
[ctxt := ctxt sender. indent := indent + 1].
Transcript crtab: indent; print: c; flush]]

[] in UndefinedObject>>DoIt
Array(Collection)>>detect:
Array(Collection)>>detect:ifNone:
Array(SequenceableCollection)>>do:
[] in Array(Collection)>>detect:ifNone:
[] in [] in UndefinedObject>>DoIt
SmallInteger>>even
[] in [] in UndefinedObject>>DoIt
[] in Array(Collection)>>detect:ifNone:
Array(SequenceableCollection)>>do:
[] in Array(Collection)>>detect:ifNone:
[] in [] in UndefinedObject>>DoIt
SmallInteger>>even
[] in [] in UndefinedObject>>DoIt
[] in Array(Collection)>>detect:ifNone:
Array(Collection)>>detect:
[] in UndefinedObject>>DoIt



--
best,
Eliot