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
> 


Reply via email to