Comment #3 on issue 3763 by [email protected]: assert failure during Decompiler>>popIntoTemporaryVariable:
http://code.google.com/p/pharo/issues/detail?id=3763

If I change the source to the following, I can bypass the MethodContext bug and get a debugger on the source of the problem:

resolveToLoadableSpecs: required map: packageMap

        | reqd allReqd map spec newReqd |
        reqd := required copy.
        allReqd := Set new.
        map := self packages map.
        [ reqd isEmpty ] whileFalse: [
                newReqd := Set new.
                reqd do: [:req |
                        (self resolveToLoadableSpec: req forMap: map packages: 
packageMap)
                                do: [:loadableSpec |
                                        newReqd addAll: loadableSpec requires.
                                        newReqd addAll: loadableSpec includes 
]].
                allReqd addAll: reqd.
                newReqd removeAllFoundIn: allReqd.
                reqd := newReqd ].
        packageMap keys do: [:pkgName |
                (spec := (packageMap at: pkgName) resolveToLoadableSpec) == nil
                        ifTrue: [ packageMap removeKey: pkgName ]
ifFalse: [ packageMap at: pkgName put: (packageMap at: pkgName) resolveToLoadableSpec ]]

The trick is to move the declaration of the two temps spec and newReqd out of the blocks and into the top level ... I suspect that newReqd was the bad boy ...


Reply via email to