X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-introspect%2Fsb-introspect.lisp;h=debda196cbf50555cb8b9529e521e9c3ee321fa6;hb=71922347ca66f2a3ad4c55092ccb3ad86a14c754;hp=a5ff21f010538ea6c720dfdd3126f1e097185dff;hpb=46dddbfef93ef40af0119978063bf87738dc733d;p=sbcl.git diff --git a/contrib/sb-introspect/sb-introspect.lisp b/contrib/sb-introspect/sb-introspect.lisp index a5ff21f..debda19 100644 --- a/contrib/sb-introspect/sb-introspect.lisp +++ b/contrib/sb-introspect/sb-introspect.lisp @@ -143,7 +143,14 @@ If an unsupported TYPE is requested, the function will return NIL. (list x))) (get-class (name) (and (symbolp name) - (find-class name nil)))) + (find-class name nil))) + (real-fdefinition (name) + ;; for getting the real function object, even if the + ;; function is being profiled + (let ((profile-info (gethash name sb-profile::*profiled-fun-name->info*))) + (if profile-info + (sb-profile::profile-info-encapsulated-fun profile-info) + (fdefinition name))))) (listify (case type ((:variable) @@ -169,7 +176,7 @@ If an unsupported TYPE is requested, the function will return NIL. (when (and (fboundp name) (or (not (symbolp name)) (not (macro-function name)))) - (let ((fun (fdefinition name))) + (let ((fun (real-fdefinition name))) (when (eq (not (typep fun 'generic-function)) (not (eq type :generic-function))) (find-definition-source fun))))) @@ -178,12 +185,13 @@ If an unsupported TYPE is requested, the function will return NIL. (when expander-fun (find-definition-source expander-fun)))) ((:method) - (when (and (fboundp name) - (typep (fdefinition name) 'generic-function)) - (loop for method in (sb-mop::generic-function-methods - (fdefinition name)) + (when (fboundp name) + (let ((fun (real-fdefinition name))) + (when (typep fun 'generic-function) + (loop for method in (sb-mop::generic-function-methods + fun) for source = (find-definition-source method) - when source collect source))) + when source collect source))))) ((:setf-expander) (when (and (consp name) (eq (car name) 'setf))