Hi All, find new VMs in VM.r2342/<http://www.mirandabanda.org/files/Cog/VM/VM.r2342/> (SimpleStackBasedCogit) and VM.r2343/ <http://www.mirandabanda.org/files/Cog/VM/VM.r2343/> ( StackToRegisterMappingCogit). 2343 seems fine but I appear to have introduced a regression into 2342. The 2343 VMs fix both of the bugs mentioned by Matthew and Yoshiki: This now evaluates to nil as intended: | a | a := false. [a ifFalse: [Error signal]] on: Error do: [:ex | a := true. ex retry] This no longer provokes a must-be-boolean error: BooleanArrayUser new loop1 As usual I'm very grateful for you pounding on these (ok, at least the 2343 VM :) ). best Eliot On Fri, Jan 7, 2011 at 10:10 AM, Eliot Miranda <eliot.miranda@gmail.com>wrote:
Hi Matthew, Hi Yoshiki,
thanks very much for this. I have a fix which I should be able to roll out this evening or tomorrow. The problem was that the run-time code that assigns inst vars of contexts was not preserving the register holding the receiver although the code generator thought it was. So in MethodContext>>#privRefresh a subsequent reference to a context inst var failed because the register assumed to be holding the context got trashed. There was another bug which caused the code generator's "simulation stack" (its main optimization data structure) to be off by one for context inst var assigns. Hopefully these two fixes will fix Yoshiki's bug also. Yoskhiki, do you have a more reliable way of reproducing that bug?
best Eliot
On Thu, Jan 6, 2011 at 6:40 PM, Matthew Fulmer <tapplek@gmail.com> wrote:
On Thu, Jan 06, 2011 at 09:27:14PM -0500, Matthew Fulmer wrote:
In Cog release 2341, as distributed at http://www.mirandabanda.org/files/Cog/VM/VM.r2341/
this causes an MNU. It should evaluate to true:
| a | a := false. [a ifFalse: [Error signal]] on: Error do: [:ex | a :=
true. ex retry]
actually it should evaluate to nil
-- Matthew Fulmer (a.k.a. Tapple)