Moreover, as long as you write primitive: 110 in cog, you don't invoke primitive 110.
You rather invoke genPrimitiveIdentical.
Please try the snippet on a StackVM.

genPrimitiveIdentical has been slightly refactored, but I see no obvious problem by just reading code.
Moreover, when you use Object = you'll also call same methods in the end...
This would deserve experimenting VMSimulator... (I don't have the Bochs plugin working now)

2016-04-28 21:21 GMT+02:00 Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com>:
Hi Juan, then how do you explain:

"Just to clarify: the issue was experienced only when running on Cog...
current versions of the Stack VM performed as expected."


2016-04-28 21:10 GMT+02:00 Juan Vuletich <JuanVuletich@zoho.com>:

On 4/28/2016 2:13 PM, Phil (list) wrote:

On Thu, 2016-04-28 at 12:58 -0400, Phil (list) wrote:
On Thu, 2016-04-28 at 16:43 +0200, Clément Bera wrote:
  Have you tried on latest VM ? I remembered fixing a bug on #==
primitive like a month ago. The problem was when performing #==
primitive with the argument being a forwarder to an immediate.

The problem still existed as of Cog #3686 (Juan found the fix
yesterday.)  On my system, Cuis last worked perfectly with 3370,
mostly
worked with 3390, somewhat worked with 3427 and did not work after
that
until we found the Character>>#= bug/fix.
Just to clarify: the issue was experienced only when running on Cog...
current versions of the Stack VM performed as expected.

Fortunately I work with Gera Richarte @ Satellogic, and it didn't take long for him to suggest an explanation: Maybe prim 110 is broken in recent Cog VMs, but nobody notices it because the only sender is #== that is already optimized by the jitter, so prim 110 is never really called. And I realized we can test that theory. First, we add this method to Character:

=== aCharacter
<primitive: 110>
    self halt

Then the following snippet (in latest Cuis, #2744):

    0 to: 255 do: [ :i1 | 0 to: 255 do: [ :i2 | i1 = i2 ifFalse: [(Character value: i1) === (Character value: i2) ifTrue: [{i1.i2} print ]]]]

prints nothing if run with Cog 3370, but prints a lot of pairs in more recent Cog. So I think Gera is right.

Thanks,
Juan Vuletich