+
+;;; ANSI specifies TYPE-ERROR if datum and arguments of ERROR are not
+;;; designators for a condition. Reported by Bruno Haible on cmucl-imp
+;;; 2004-10-12.
+(flet ((test (&rest args)
+ (multiple-value-bind (res err)
+ (ignore-errors (apply #'error args))
+ (assert (not res))
+ (assert (typep err 'type-error))
+ (assert (not (nth-value 1 (ignore-errors
+ (type-error-datum err)))))
+ (assert (not (nth-value 1 (ignore-errors
+ (type-error-expected-type err))))))))
+ (test '#:no-such-condition)
+ (test nil)
+ (test t)
+ (test 42)
+ (test (make-instance 'standard-object)))
+
+;;; If CERROR is given a condition, any remaining arguments are only
+;;; used for the continue format control.
+(let ((x 0))
+ (handler-bind
+ ((simple-error (lambda (c) (incf x) (continue c))))
+ (cerror "Continue from ~A at ~A"
+ (make-condition 'simple-error :format-control "foo"
+ :format-arguments nil)
+ 'cerror (get-universal-time))
+ (assert (= x 1))))