Hi Ben,
On Sat, Jan 6, 2018 at 8:47 PM, Ben Coman <[email protected]> wrote:
> With Linux 64 bit image
> TestRunner running FLBinaryFileStreamSerializationTest
> produces error "PrimitiveFailed: primitive #basicIdentityHash in
> SmallFloat64 failed"
>
I suspect the SmallFloat64 basicIdentityHash method is missing or using the
wrong primitive number. Here's what happens in Squeak:
1.0 class -> 1.0 identityHash hex -> ((1.0 class
whichClassIncludesSelector: #identityHash) >> #identityHash) primitive
SmallFloat64->'16r7F0000000000000'->171
And primitive 171 is the primitiveImmediateAsInteger primitive that
converts SmallIntegers to themselves, Characters to their integer codes,
and SmallFloat64 to an integer representing their bits. e.g.
#(-0.0 0.0 -1.0 1.0) collect: [:n| n -> n identityHash hex -> (n
identityHash bitAnd: 2 << 64 - 1) hex]
{-0.0->'-16r1000000000000000'->'16r1F000000000000000' .
0.0->'16r0'->'16r0' .
-1.0->'-16r810000000000000'->'16r1F7F0000000000000' .
1.0->'16r7F0000000000000'->'16r7F0000000000000'}
SmallFloat64>>identityHash
"Answer an integer unique to the receiver."
<primitive: 171>
^self primitiveFailed
HTH
> The same error occurs evaluating...
> 1.0 largeIdentityHash
> which works fine on 32-bit.
>
> https://pharo.fogbugz.com/f/cases/20936/64bit-primitiveFailure-for-1-0-
> largeIdentityHash
>
> Build information:
> Pharo-7.0+alpha.build.409.sha.bb4eaaf976e3fb148b33b6d87598022b77329768
> (64 Bit)
> CoInterpreter VMMaker.oscog-eem.2295 Dec 21 2017
> StackToRegisterMappingCogit VMMaker.oscog-eem.2297 Dec 21 2017
> VM: 201712211450
> Unix built on Dec 21 2017 14:53:19 Compiler: 4.8.4
>
> cheers -ben
>
--
_,,,^..^,,,_
best, Eliot