X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fprofile.lisp;h=8229b1ce720a4432ab7961548554c322add579c2;hb=c3699db2053ff3b5ac6a98d4431c3789496002d8;hp=87eab0bbeb72357190a90ad300c91df52cc5f038;hpb=ca379afc74fe525fd70035546d066de5f5ec874d;p=sbcl.git diff --git a/src/code/profile.lisp b/src/code/profile.lisp index 87eab0b..8229b1c 100644 --- a/src/code/profile.lisp +++ b/src/code/profile.lisp @@ -47,7 +47,11 @@ ;;; We associate a PROFILE-INFO structure with each profiled function ;;; name. This holds the functions that we call to manipulate the ;;; closure which implements the encapsulation. -(defvar *profiled-fun-name->info* (make-hash-table)) +(defvar *profiled-fun-name->info* + (make-hash-table + ;; EQL testing isn't good enough for generalized function names + ;; like (SETF FOO). + :test 'equal)) (defstruct (profile-info (:copier nil)) (name (missing-arg) :read-only t) (encapsulated-fun (missing-arg) :type function :read-only t) @@ -229,7 +233,9 @@ (string (let ((package (find-undeleted-package-or-lose name))) (do-symbols (symbol package) (when (eq (symbol-package symbol) package) - (when (fboundp symbol) + (when (and (fboundp symbol) + (not (macro-function symbol)) + (not (special-operator-p symbol))) (funcall function symbol)) (let ((setf-name `(setf ,symbol))) (when (fboundp setf-name)