![](https://secure.gravatar.com/avatar/6cd36cba072a7a7039b692e627bab8c6.jpg?s=120&d=mm&r=g)
On Sat, 5 Sep 2009, Tobias C. Rittweiler wrote:
%DEFINE-COMPONENT-INLINE-METHODS contains the following LOOP form:
(loop for data = rest then (cddr data) while data for key = (first data) for value = (second data) ...)
However, if you look at LOOP's BNF in the specification, you'll see that termination clauses *must* appear after :for clauses.
The obvious transform is to move WHILE down and condition the FORs. (loop for name in +asdf-methods+ do (let ((keyword (intern (symbol-name name) :keyword))) (loop for data = rest then (cddr data) for key = (and data (first data)) for value = (and data (second data)) while data when (eq key keyword) do (destructuring-bind (op qual (o c) &body body) value The FOR conditions can then be dropped since (nth n nil) = nil (loop for name in +asdf-methods+ do (let ((keyword (intern (symbol-name name) :keyword))) (loop for data = rest then (cddr data) for key = (first data) for value = (second data) while data when (eq key keyword) do (destructuring-bind (op qual (o c) &body body) value Thus this can be fixed by simply moving the WHILE down two lines. - Daniel