- (cond (tail
- (let ((next (token-scanner-place-next tail)))
- (setf type (token-scanner-place-type next)
- value (token-scanner-place-value next)
- line (token-scanner-place-line next)
- column (token-scanner-place-column next)
- tail next)))
- (t
- (multiple-value-bind (ty val) (scanner-token scanner)
- (setf type ty
- value val)
- (when (plusp captures)
- (let ((next (make-token-scanner-place
- :type ty :value val :line line :column column)))
- (setf (token-scanner-place-next tail) next
- tail next))))))))
+ (acond ((and tail (token-scanner-place-next tail))
+ (setf type (token-scanner-place-type it)
+ value (token-scanner-place-value it)
+ line (token-scanner-place-line it)
+ column (token-scanner-place-column it)
+ tail it))
+ (t
+ (multiple-value-bind (ty val) (scanner-token scanner)
+ (setf type ty
+ value val)
+ (if (plusp captures)
+ (let ((next (make-token-scanner-place
+ :type ty :value val
+ :line line :column column)))
+ (setf (token-scanner-place-next tail) next
+ tail next))
+ (setf tail nil)))))))