Commit 581ebd0d authored by Jan Moringen's avatar Jan Moringen

Don't infinite-loop on ill-formed DEFSYSTEM :perform option

Before this commit, ill-formed DEFSYSTEM options of the form

  :perform ((op ...)) instead of :perform (op ...)

caused %DEFINE-COMPONENT-INLINE-METHODS to infinite-loop.
parent adcaad53
......@@ -187,8 +187,11 @@ Please only define ~S and secondary systems with a name starting with ~S (e.g. ~
:for name = (and (keywordp key) (find key +asdf-methods+ :test 'string=))
:when name :do
(destructuring-bind (op &rest body) value
(when (or (not (symbolp op))
(not (find-if #'consp body))) ; must contain non-empty lambda list
(sysdef-error "Ill-formed inline method: ~S" value))
(loop :for arg = (pop body)
:while (atom arg)
:while (atom arg) ; guaranteed to terminate due to (find-if #'consp ...)
:collect arg :into qualifiers
(destructuring-bind (o c) arg
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment