X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Finfo-functions.lisp;h=9e41aeb9c6396473946cb16550c52eb4fb1c6497;hb=1bfc464c657a8f4ad24ef612f76a38d8f6f1bbad;hp=b74f6372b0fa35f6319f5cefb5f84bacae887862;hpb=edaebea5b5e6682b36f4067e3b187bd9fb4a5c25;p=sbcl.git diff --git a/src/compiler/info-functions.lisp b/src/compiler/info-functions.lisp index b74f637..9e41aeb 100644 --- a/src/compiler/info-functions.lisp +++ b/src/compiler/info-functions.lisp @@ -17,6 +17,8 @@ (in-package "SB!C") +;;;; 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 @@ -53,10 +55,11 @@ ;; 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*)) @@ -107,6 +110,15 @@ (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))) ;;;; ANSI Common Lisp functions which are defined in terms of the info ;;;; database