On Mon, 25 Apr 2011, Frank Shearar wrote:
On 2011/04/25 04:35, Levente Uzonyi wrote:
On Sun, 24 Apr 2011, Levente Uzonyi wrote:
snip
it didn't work for some reason. The execution always ran into the error 'computation has been terminated' in MethodContext >> #cannotReturn: and the method context (which stitches the continuation onto the stack) was broken (nil in temporaries where should be non nil values). Finally I tried it in SqueakVM instead of Cog and it worked. The tests are green, the example code
I tracked down this issue a bit more. The cause of the problem is that with CogVM the pc of thisContext is being set to nil when the execution leaves the context. This means, that [thisContext copy] will not be able to copy the pc of the context:
{ thisContext pc. thisContext copy pc } "==> #(23 nil)"
That would explain why I didn't come across it: I wrote the library on the SqueakVM.
Not exactly. Your serialization method works with Cog, because the problem occurs when #copy is sent to thisContext. Since your method is serializing the contexts and all their variables separately to a collection, therefore it works.
Levente
frank