> >> 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
