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.


Ok, now we agree :)
I commited this version and removed my previous test.

Thanks!

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 isVariableBinding
and: [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




--
Mariano
http://marianopeck.wordpress.com