\f
;;;; full call
-;;; Given a function continuation FUN, return as values a TN holding
-;;; the thing that we call and true if the thing is named (false if it
-;;; is a function). There are two interesting non-named cases:
-;;; -- Known to be a function, no check needed: return the
-;;; continuation loc.
-;;; -- Not known what it is.
+;;; Given a function continuation FUN, return (VALUES TN-TO-CALL
+;;; NAMED-P), where TN-TO-CALL is a TN holding the thing that we call
+;;; NAMED-P is true if the thing is named (false if it is a function).
+;;;
+;;; There are two interesting non-named cases:
+;;; -- We know it's a function. No check needed: return the
+;;; continuation LOC.
+;;; -- We don't know what it is.
(defun fun-continuation-tn (node block cont)
(declare (type continuation cont))
(let ((2cont (continuation-info cont)))
(specifier-type 'function))
(values temp nil))))))))
-;;; Set up the args to Node in the current frame, and return a tn-ref
+;;; Set up the args to NODE in the current frame, and return a TN-REF
;;; list for the passing locations.
(defun move-tail-full-call-args (node block)
(declare (type combination node) (type ir2-block block))
(defun ir2-convert-throw (node block)
(declare (type mv-combination node) (type ir2-block block))
(let ((args (basic-combination-args node)))
+ (check-catch-tag-type (first args))
(vop* throw node block
((continuation-tn node block (first args))
(reference-tn-list
;;; Set up the unwind block for these guys.
(defoptimizer (%catch ir2-convert) ((info-cont tag) node block)
+ (check-catch-tag-type tag)
(emit-nlx-start node block (continuation-value info-cont) tag))
(defoptimizer (%unwind-protect ir2-convert) ((info-cont cleanup) node block)
(emit-nlx-start node block (continuation-value info-cont) nil))