[Vm-dev] become: bug

Florin Mateoc florin.mateoc at gmail.com
Sat Jan 30 21:58:28 UTC 2016

Hi all,

Perhaps this is a known bug, since apparently it's been there forever, but now that we have a shiny new vm, it might be
the right time to fix it.
If we do:

    | a b |

    a := Array new: 1.
    a at: 1 put: (Array with: a).

At this point, as expected, evaluating

    a first first == a

returns true.
But if we then do:

    b := Object new.
    a become: b.


    ((b at: 1) at: 1) == b

returns false.

    ((b at: 1) at: 1) == a

returns true.

This obvious bug happens in all the VMs (I tried with Squeak 2.8 and 5)


P.S. Wow, I just tried this in VA and in VW.
In VA it works correctly (except it has to be "b become: a" since VA has one-way become:), but the same bug exists in VW
(I tried with 2.5 and 7.3)

More information about the Vm-dev mailing list