Gary King wrote:
Hi Robert,
I'm inclined to prefer that we rearrange that code block so that the when is pushed upstream, and we simply don't push a NIL onto the *central-registry*.
Would that be an acceptable solution?
I'd rather do it like that too but I don't think it'll work. The trouble is the entries are evaluated when searched and ASDF may not know that an entry is nil until after it does the evaluation. The entry in question is
'(let ((home (sb-ext:posix-getenv "SBCL_HOME"))) (when (and home (not (string= home ""))) (merge-pathnames "site-systems/" (truename home))))
and I think that we can't know whether or not this entry is valid until after we've put it on the *central-registry*.
So..., I'm going to set up the iteration so that nil entries are removed during the search and leave the SBCL portion as is.
Ah. I see. I hadn't read the code in question carefully enough. I see now that the forms are evaluated only when the search is done. This is necessary so that SBCL can drop these entries onto the list early, and defer computation of the directories until the image is started.
The clearer case is the following one (which doesn't have the NIL), though:
(pushnew '(merge-pathnames ".sbcl/systems/" (user-homedir-pathname)) *central-registry*)
It's quite obvious here why one wants the computation of USER-HOMEDIR-PATHNAME to be deferred.
Point taken.