(let ((head (component-head component)))
(do ()
((dolist (ep (block-succ head) t)
- (unless (block-flag ep)
+ (unless (or (block-flag ep) (block-delete-p ep))
(find-dfo-aux ep head component)
(return nil))))))
(let ((num 0))
(do-blocks-backwards (block component :both)
(if (block-flag block)
(setf (block-number block) (incf num))
- (setf (block-delete-p block) t)))
- (do-blocks (block component)
- (when (block-delete-p block)
- (delete-block block))))
+ (delete-block-lazily block)))
+ (clean-component component (component-head component)))
(values))
;;; Move all the code and entry points from OLD to NEW. The code in
(defun find-dfo-aux (block head component)
(unless (eq (block-component block) component)
(join-components component (block-component block)))
- (unless (block-flag block)
+ (unless (or (block-flag block) (block-delete-p block))
(setf (block-flag block) t)
(dolist (succ (block-succ block))
(find-dfo-aux succ head component))