:optimizer optimizer))
(target-env (or *backend-info-environment* *info-environment*)))
(dolist (name names)
+ (let ((old-function-info (info :function :info name)))
+ (when old-function-info
+ ;; This is handled as an error because it's generally a bad
+ ;; thing to blow away all the old optimization stuff. It's
+ ;; also a potential source of sneaky bugs:
+ ;; DEFKNOWN FOO
+ ;; DEFTRANSFORM FOO
+ ;; DEFKNOWN FOO ; possibly hidden inside some macroexpansion
+ ;; ; Now the DEFTRANSFORM doesn't exist in the target Lisp.
+ ;; However, it's continuable because it might be useful to do
+ ;; it when testing new optimization stuff interactively.
+ (cerror "Go ahead, overwrite it."
+ "~@<overwriting old FUNCTION-INFO ~2I~_~S ~I~_for ~S~:>"
+ old-function-info name)))
(setf (info :function :type name target-env) ctype)
(setf (info :function :where-from name target-env) :declared)
(setf (info :function :kind name target-env) :function)
names)
;;; Return the FUNCTION-INFO for NAME or die trying. Since this is
-;;; used by people who want to modify the info, and the info may be
+;;; used by callers who want to modify the info, and the info may be
;;; shared, we copy it. We don't have to copy the lists, since each
;;; function that has generators or transforms has already been
;;; through here.