[squeak-dev] The Trunk: Kernel-eem.692.mcz
Eliot Miranda
eliot.miranda at gmail.com
Tue May 29 22:50:08 UTC 2012
On Sun, May 27, 2012 at 8:37 PM, Levente Uzonyi <leves at elte.hu> wrote:
> It's a bit dangerous to change the hash without rehashing the collections
> which contain CompiledMethods as keys. For example DebuggerMethodMap's
> MapCache uses CompiledMethods as keys.
Good point. I'll fix this when I fix the methods comment ( COmpiledmethod
=> CompiledMethod)
>
>
>
> Levente
>
>
> On Sun, 27 May 2012, commits at source.squeak.org wrote:
>
> Eliot Miranda uploaded a new version of Kernel to project The Trunk:
>> http://source.squeak.org/**trunk/Kernel-eem.692.mcz<http://source.squeak.org/trunk/Kernel-eem.692.mcz>
>>
>> ==================== Summary ====================
>>
>> Name: Kernel-eem.692
>> Author: eem
>> Time: 27 May 2012, 3:08:41.389 pm
>> UUID: 72f75218-3cfc-4575-b159-**8de0e44aa479
>> Ancestors: Kernel-nice.691
>>
>> Implement CompiledMethod>>#hash, both to accord with
>> CompiledMethod>>#= and to override ByteArray>>#hash
>> which looks at all bytes of the receiver and hence may
>> produce a variable hash if the GC moves literals in a method.
>>
>> =============== Diff against Kernel-nice.691 ===============
>>
>> Item was added:
>> + ----- Method: CompiledMethod>>hash (in category 'comparing') -----
>> + hash
>> + "CompiledMethod>>#= compares code, i.e. same literals and same
>> bytecode.
>> + So we look at the header, methodClass and some bytes between
>> initialPC and endPC,
>> + but /not/ the selector because the equal method does not compare
>> selectors.
>> + Note that we must override ByteArray>hash which looks at all
>> bytes of the receiver.
>> + Using bytes from the pointer part of a COmpiledmethod can lead
>> to a variable hash
>> + if and when when the GC moves literals in the receiver."
>> + | initialPC endPC hash |
>> + initialPC := self initialPC.
>> + endPC := self endPC.
>> + hash := self species hash + self header + initialPC + endPC +
>> self methodClass hash bitAnd: 16rFFFFFFF.
>> + "sample approximately 20 bytes"
>> + initialPC to: endPC by: (endPC - initialPC // 20 max: 1) do:
>> + [:i| hash := hash + (self at: i)].
>> + ^hash
>> +
>> + "(CompiledMethod>>#hash) hash"!
>>
>>
>>
>>
>
--
best,
Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20120529/d6a91299/attachment.htm
More information about the Squeak-dev
mailing list
|