Mariano did you add a nice comment to the test because I love when I can read a nice explanation like the one of eliot and then only read the code :).
Stef On May 3, 2012, at 6:49 PM, Mariano Martinez Peck wrote: > > > 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 <[email protected]> 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 >
