(if (listp x)
x
(list x)))
- (get-class (name)
- (and (symbolp name)
- (find-class name nil))))
+ (get-class (name)
+ (and (symbolp name)
+ (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)
(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)))))
(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))
(sb-kernel::layout-source-location layout)))))))
(method-combination
(car
- (find-definition-sources-by-name (sb-pcl::method-combination-type object)
- :method-combination)))
+ (find-definition-sources-by-name
+ (sb-pcl::method-combination-type-name object) :method-combination)))
(package
(translate-source-location (sb-impl::package-source-location object)))
(class
(sb-pcl::unparse-specializers
(sb-mop:method-specializers object)))))
source))
+ #+sb-eval
+ (sb-eval:interpreted-function
+ (let ((source (translate-source-location
+ (sb-eval:interpreted-function-source-location object))))
+ source))
(function
(cond ((struct-accessor-p object)
(find-definition-source
;;; FIXME: maybe this should be renamed as FUNCTION-LAMBDA-LIST?
(defun function-arglist (function)
- "Describe the lambda list for the function designator FUNCTION.
-Works for special-operators, macros, simple functions and generic
-functions. Signals error if not found"
+ "Describe the lambda list for the extended function designator FUNCTION.
+Works for special-operators, macros, simple functions,
+interpreted functions, and generic functions. Signals error if
+not found"
(cond ((valid-function-name-p function)
- (function-arglist
- (or (macro-function function) (fdefinition function))))
+ (function-arglist (or (and (symbolp function)
+ (macro-function function))
+ (fdefinition function))))
((typep function 'generic-function)
(sb-pcl::generic-function-pretty-arglist function))
+ #+sb-eval
+ ((typep function 'sb-eval:interpreted-function)
+ (sb-eval:interpreted-function-lambda-list function))
(t (sb-impl::%simple-fun-arglist
(sb-impl::%closure-fun function)))))