(in-package "SB!C")
\f
+;;;; internal utilities defined in terms of INFO
+
;;; Check that NAME is a valid function name, returning the name if
;;; OK, and signalling an error if not. In addition to checking for
;;; basic well-formedness, we also check that symbol names are not NIL
;; scrubbing old data II: dangling forward references
;;
- ;; (This could happen if someone does PROCLAIM FTYPE in macroexpansion,
- ;; which is bad style, or at compile time, e.g. in EVAL-WHEN (:COMPILE)
- ;; inside something like DEFSTRUCT, in which case it's reasonable style.
- ;; Either way, it's no longer a free function.)
+ ;; (This could happen if someone executes PROCLAIM FTYPE at
+ ;; macroexpansion time, which is bad style, or at compile time, e.g.
+ ;; in EVAL-WHEN (:COMPILE) inside something like DEFSTRUCT, in which
+ ;; case it's reasonable style. Either way, NAME is no longer a free
+ ;; function.)
(when (boundp '*free-functions*) ; when compiling
(remhash name *free-functions*))
(setf (info :function :where-from name) :defined)
(if (info :function :assumed-type name)
(setf (info :function :assumed-type name) nil))))
+
+;;; Decode any raw (INFO :FUNCTION :INLINE-EXPANSION-DESIGNATOR FUN-NAME)
+;;; value into a lambda expression, or return NIL if there is none.
+(declaim (ftype (function ((or symbol cons)) list) fun-name-inline-expansion))
+(defun fun-name-inline-expansion (fun-name)
+ (let ((info (info :function :inline-expansion-designator fun-name)))
+ (if (functionp info)
+ (funcall info)
+ info)))
\f
;;;; ANSI Common Lisp functions which are defined in terms of the info
;;;; database