- (setf (sb!eval:interpreted-function-name def) name)
- (ecase (info :function :where-from name)
- (:assumed
- (setf (info :function :where-from name) :defined)
- (setf (info :function :type name)
- (extract-function-type def))
- (when (info :function :assumed-type name)
- (setf (info :function :assumed-type name) nil)))
- (:declared)
- (:defined
- (setf (info :function :type name) (extract-function-type def))))
+ #-sb-xc-host (progn
+ #!+sb-interpreter
+ (setf (sb!eval:interpreted-function-name def) name))
+ (flet ((set-type-info-from-def ()
+ (setf (info :function :type name)
+ #-sb-xc-host (extract-function-type def)
+ ;; When we're built as a cross-compiler, the DEF is
+ ;; a function implemented by the cross-compilation
+ ;; host, which is opaque to us, so we have to punt here.
+ #+sb-xc-host *universal-function-type*)))
+ (ecase (info :function :where-from name)
+ (:assumed
+ (setf (info :function :where-from name) :defined)
+ (set-type-info-from-def)
+ (when (info :function :assumed-type name)
+ (setf (info :function :assumed-type name) nil)))
+ (:declared)
+ (:defined
+ (set-type-info-from-def)
+ ;; We shouldn't need to clear this here because it should be
+ ;; clear already (having been cleared when the last definition
+ ;; was processed).
+ (aver (null (info :function :assumed-type name))))))