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 factorialGOTO 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>>runContinuation currentDo: [ :cc | here := cc ].here value: true.�Crazy new runBTW, 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