0.pre7.88:
[sbcl.git] / src / compiler / info-functions.lisp
index b74f637..9e41aeb 100644 (file)
@@ -17,6 +17,8 @@
 
 (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