arguments contain duplicated elements;
** RESTART-CASE understands local macros;
** ... and associates exactly its own restarts with a condition;
+ ** ENDP in safe mode checks its argument to be of type LIST;
planned incompatible changes in 0.8.x:
* (not done yet, but planned:) When the profiling interface settles
(defknown tree-equal (t t &key (:test callable) (:test-not callable)) boolean
(foldable flushable call))
-(defknown endp (t) boolean (foldable unsafely-flushable movable))
+(defknown endp (list) boolean (foldable flushable movable))
(defknown list-length (list) (or index null) (foldable unsafely-flushable))
(defknown nth (index list) t (foldable flushable))
(defknown nthcdr (index list) t (foldable unsafely-flushable))
(let ((last (block-last block)))
(typecase last
(cif
- (flush-dest (if-test last))
- (when (unlink-node last)
- (return)))
+ (if (memq (continuation-type-check (if-test last))
+ '(nil :deleted))
+ ;; FIXME: Remove the test above when the bug 203
+ ;; will be fixed.
+ (progn
+ (flush-dest (if-test last))
+ (when (unlink-node last)
+ (return)))
+ (return)))
(exit
(when (maybe-delete-exit last)
(return)))))
(convert-if-if use node)
(when (continuation-use test) (return)))))
- (let* ((type (continuation-type test))
- (victim
- (cond ((constant-continuation-p test)
- (if (continuation-value test)
- (if-alternative node)
- (if-consequent node)))
- ((not (types-equal-or-intersect type (specifier-type 'null)))
- (if-alternative node))
- ((type= type (specifier-type 'null))
- (if-consequent node)))))
- (when victim
- (flush-dest test)
- (when (rest (block-succ block))
- (unlink-blocks block victim))
- (setf (component-reanalyze (node-component node)) t)
- (unlink-node node))))
+ (when (memq (continuation-type-check test)
+ '(nil :deleted))
+ ;; FIXME: Remove the test above when the bug 203 will be fixed.
+ (let* ((type (continuation-type test))
+ (victim
+ (cond ((constant-continuation-p test)
+ (if (continuation-value test)
+ (if-alternative node)
+ (if-consequent node)))
+ ((not (types-equal-or-intersect type (specifier-type 'null)))
+ (if-alternative node))
+ ((type= type (specifier-type 'null))
+ (if-consequent node)))))
+ (when victim
+ (flush-dest test)
+ (when (rest (block-succ block))
+ (unlink-blocks block victim))
+ (setf (component-reanalyze (node-component node)) t)
+ (unlink-node node)))))
(values))
;;; Create a new copy of an IF node that tests the value of the node