[squeak-dev] Scheme continuations vs Squeak continuations
Lukas Renggli
renggli at gmail.com
Fri Jan 30 20:26:14 UTC 2009
> do you have any pointer about an alternate implementation which would
> capture inst vars as well ?
What about something like this?
Continuation>>initializeFromContext: aContext
| valueStream context |
valueStream := WriteStream on: (Array new: 20).
context := aContext.
[context notNil] whileTrue:
[valueStream nextPut: context.
1 to: context class instSize do: [:i | valueStream nextPut: (context
instVarAt: i)].
1 to: context localSize do: [:i | valueStream nextPut: (context localAt: i)].
valueStream nextPut: context receiver snapshotCopy. " <-- add this line "
context := context sender].
values := valueStream contents
Continuation>>restoreValues
| valueStream context |
valueStream := values readStream.
[valueStream atEnd] whileFalse:
[context := valueStream next.
1 to: context class instSize do: [:i | context instVarAt: i put:
valueStream next].
1 to: context localSize do: [:i | context localAt: i put: valueStream next].
context receiver restoreFromSnapshot: valueStream next " <-- add this line " ]
Note that this does not solve the problem of the workspace variable
though. Workspace bindings are like global data and a continuation
cannot know what data outside its context you want to backtrack.
That's why there is a registration mechanism for objects in Seaside.
Cheers,
Lukas
>
> Stef
>
>
>
--
Lukas Renggli
http://www.lukas-renggli.ch
More information about the Squeak-dev
mailing list
|