On Tue, Mar 25, 2014 at 12:11 AM, Eliot Miranda <[email protected]>wrote:

>
>
>
> On Mon, Mar 24, 2014 at 4:02 PM, [email protected] <[email protected]>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 <
>> [email protected]> 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*.



>>> Cheers,
>>> -- Pavel
>>>
>>
>>
>
>
> --
> best,
> Eliot
>

Reply via email to