if loading an .asd errors then the broken system gets registered
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
ASDF |
Fix Released
|
Medium
|
Faré |
Bug Description
essentially:
CL-USER> (asdf:defsystem :foo :defsystem-
; Evaluation aborted on Component :NONEXISTENT not found, required by NIL.
CL-USER> (asdf:find-system :foo) <---- this should not find the system
#<ASDF/
CL-USER> (asdf:component
NIL
the real-world scenario is:
CL-USER> (ql:quickload :projectured.
While evaluating the form starting at line 7, column 0
of #P"/home/
CL-USER> (ql:quickload :projectured.
To load "projectured.
Load 1 ASDF system:
projectured
; Loading "projectured.
(:PROJECTURED.
CL-USER>
Changed in asdf: | |
status: | Fix Committed → Fix Released |
See also duplicate bug #1532584 where the same pathological behavior is reached by using an invalid component type while parsing the system.
The way defsystem is parsed should be revised.
Solution 1: have an unwind-protect unregister the system if the evaluation failed.
Solution 2: have a flag in the system that indicates whether it's been successfully parsed; if not, report error, or reparse, or ouch. [Sounds more complex, for less results]
Solution 3: rewrite the entire parsing infrastructure inherited from ASDF 1, with something better that works bottom up rather than top down (though it will have to maintain a top-down context; so I suppose that really means, distinguishing build-time component context objects from finished component objects; meh).