Ok. If I understand this correctly, this is yet ANOTHER thing to test, right?� I mean, it does not cover my original problem but another one possible ;)
right?I was assuming that my test is a superset of yours, but now I see it is not strict enough. �It also needs to compare bindings to see that they're identical. I've attached a stricter version. �This says that for any global, it should match either the class's notion of what bindingOf: the key is, or bindingOf: should be nil and the binding should be in Undeclared. � If the class answers a different binding through bindingOf: or answers no binding and the binding is not in Undeclared then the variable in the method is wrong.
methodsWithUnboundGlobals"Get all methods that use undeclared global objects that are not listed in Undeclared. For a clean image the result should be empty.""SystemNavigation new methodsWithUnboundGlobals"^self allSelect:[:m|m literals anySatisfy:[:l|l isVariableBindingand: [l key isSymbol "avoid class-side methodClass literals"and: [(m methodClass bindingOf: l key)ifNil: [(Undeclared associationAt: l key ifAbsent: []) ~~ l]ifNotNil: [:b| b ~~ l]]]]]So I think with this stricter definition�self assert: SystemNavigation new�methodsWithUnboundGlobals isEmpty is an adequate test.
Thanks Eliot.
�And I have 6 methods from the classes SmalltalkImage and ScriptLoader and all the 6 literals are pointing to ScriptLoader. So something weird happened with this class.
Any idea?
For the moment I will update the test and do a Compiler recompileAll.
�--
> Association >> #literalEqual: otherLiteral
> ��� "Answer true if the receiver and otherLiteral represent the same
> literal.
> ��� Variable bindings are literally equals only if identical.
> ��� This is how variable sharing works, by preserving identity and changing
> only the value."
> ��� ^self == otherLiteral
>
> instead of the Object implementation.
>
>
>>
>> On 1 May 2012 17:52, Mariano Martinez Peck <marianopeck@gmail.com> wrote:
>>>
>>> (Smalltalk globals associationAt: #ScriptLoader) == ((SmalltalkImage >>
>>> #shrinkToCore) literalAt: 4)
>>> gives false when it should be true.� If I do a Compiler recompileAll it
>>> gets fixed. So, my question is, is that normal? how could that happen?
>>> is there any real problem behind?
>>>
>>> anyway, can we do a recompileAll for the moment?
>>>
>>> thanks!
>>>
>>> --
>>> Mariano
>>> http://marianopeck.wordpress.com
>>>
>>
>
>
>
> --
> Mariano
> http://marianopeck.wordpress.com
>
Best regards,
Igor Stasenko.
--
Mariano
http://marianopeck.wordpress.com
--
Mariano
http://marianopeck.wordpress.com
--
best,Eliot
--
Mariano
http://marianopeck.wordpress.com
--
best,Eliot