On May 18, 2010, at 3:35 PM, Mariano Martinez Peck wrote:
> Hi folks. I was debugging a problem with Moose and I realized that 2
> different methods can have the same CompiledMethod. This was weird for me. I
> don't know if this is correct or not.
>
> For example, evaluate:
>
> (InstructionClient>>#methodReturnTop) = (InstructionClient>>#doDup) ->
> true
>
> If you look at
>
> CompiledMethod = aCompiledMethod
> "Answer whether the receiver implements the same code as aCompiledMethod."
>
> | numLits |
> self == aCompiledMethod
> ifTrue: [ ^ true ].
> self class = aCompiledMethod class
> ifFalse: [ ^ false ].
> self size = aCompiledMethod size
> ifFalse: [ ^ false ].
> self header = aCompiledMethod header
> ifFalse: [ ^ false ].
> self initialPC to: self endPC do: [ :i |
> (self at: i) = (aCompiledMethod at: i)
> ifFalse: [ ^ false ] ].
> (self sameLiteralsAs: aCompiledMethod)
> ifFalse: [ ^ false ].
> self halt.
> ^ true
>
>
> It is returning in the last ^ true.
>
> What was weird for me is that (self sameLiteralsAs: aCompiledMethod) returns
> true also. But if I print both literals:
>
> self literals -> {#methodReturnTop. (#InstructionClient->InstructionClient)}
>
> aCompiledMethod literals -> {#doDup. (#InstructionClient->InstructionClient)}
>
> So...for me they are differnt, but sameLiteralsAs: is returning true.
> Debugging that, it seems that in that method it is returning in the last ^
> true.
>
> So...any hints? is this the expected behavior ? or it is a bug ?
certainly a bug
>
> Thanks
>
> Mariano
>
>
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project