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 ?
Thanks
Mariano