Hello,

The pharo continuations were ported from seaside because several people were using seaside continuations in non seaside related projects.

I wouldn't rely on assigning the receiver on thisContext because it's a bit buggy.

See:

ByteSymbol>>bar
thisContext receiver: #foo.
^ self

10 timesRepeat: [Transcript show: #bar bar]

Transcript:
foofoofoobarbarbarbarbarbarbar




2014-03-25 0:58 GMT+01:00 Eliot Miranda <eliot.miranda@gmail.com>:



On Mon, Mar 24, 2014 at 4:33 PM, phil@highoctane.be <phil@highoctane.be> wrote:
On Tue, Mar 25, 2014 at 12:11 AM, Eliot Miranda <eliot.miranda@gmail.com> wrote:



On Mon, Mar 24, 2014 at 4:02 PM, phil@highoctane.be <phil@highoctane.be> wrote:
I am curious.

Maybe on the first one, substitute something when a DNU is encountered.
Like logging undefined receivers.

I wonder how the next one behaves on JITted methods. I fear that offset errors may lead to weird errors.

It *should* "just work" :-) (provided the jump distance of -12 is correct). �The VM traps assignments to variables of contexts, and converts them to vanilla contexts. �Therefore the jump doesn't occur in JITTED code but back in normal interpreted bytecode.


How magical!
On Mon, Mar 24, 2014 at 11:51 PM, Pavel Krivanek <pavel.krivanek@gmail.com> wrote:
Who can find the most useful usage of this?

thisContext instVarNamed: #receiver put: 42.
self factorial

GOTO statement in Pharo:

FileStream stdout nextPutAll: 'Hello world'; lf.�
thisContext jump: -12.
Let's collect the next ones :-)

this is my favourite, and would lock-up a strict blue book VM. �(I once locked up Allen Wirfs-Brock's 4404 with this and he wasn't best pleased [forgive me Allen])


| a |
a := Array with: #perform:withArguments: with: nil.
a at: 2 put: a.
a perform: a first withArguments: a

;-)

The infinite is near.

Not as blocking, but still... (Alt-. interrupts this one)

Crazy>>run
Continuation currentDo: [ :cc | here := cc ].
here value: true.
Crazy new run

BTW, is there any support for partial continuations in Pharo? Continuations like this one look like full continuations and that's *huge*.

Yes, see Seaside. �Remember a Process is simply a linked list of context /objects/, so it is easy to copy as much or as little of one as one wants.



Cheers,
-- Pavel




--
best,
Eliot




--
best,
Eliot