[Openmcl-devel] "internal" functions and xref

Gail Zacharias gz at clozure.com
Tue Nov 18 08:10:22 PST 2008


At 11/18/2008 03:25 AM, Takehiko Abe wrote:
>(while trying to fix slime's who-calls for ccl-1.3, I noticed)
>
>ccl::make-xref-entry returns bogus xrefs when it is given "internal"
>functions.

This is now fixed in the trunk, pretty much as you suggested.


>Example:
>
>    $ ccl -n
>    Welcome to Clozure Common Lisp Version 1.3-dev-r  (LinuxX8664)!
>    ? (require 'xref)
>    XREF
>    ("XREF")
>    ? (ccl::callers 'print-object)
>    (#<CCL::STANDARD-KERNEL-METHOD PRINT-OBJECT
>(INSPECTOR::UNBOUND-MARKER T)>
>     #<CCL::STANDARD-KERNEL-METHOD CCL::REPORT-CONDITION (CONDITION T)>
>     CCL::WRITE-A-FROB #<CCL::STANDARD-KERNEL-METHOD PRINT-OBJECT
>(COMPLEX T)>
>     (:INTERNAL (PRINT-OBJECT (CLASS T)))
>     (:INTERNAL (PRINT-OBJECT (STANDARD-OBJECT T)))
>     (:INTERNAL CCL::WRITE-AN-ISTRUCT))
>    ? (car (last *))
>    (:INTERNAL CCL::WRITE-AN-ISTRUCT)
>    ? (ccl::make-xref-entry * :direct-calls)
>    #<XREF-ENTRY INTERNAL METHOD (WRITE-AN-ISTRUCT)>
>    ?
>
>A simple fix I came up with was to add a new CASE clause for :internal:
>
>(defun make-xref-entry (input relation)
>    (etypecase input
>      (symbol
>       ...)
>      (method
>       ...)
>      (cons
>       (case (car input)
>         ((ppc-lap-macro compiler-macro-function)
>          ...)
>+      ((:internal)
>+       (make-xref-entry (cadr input) relation))
>         (t
>          )))))
>
>But then I noticed that there are inputs for flet/labels local
>functions too. e.g.
>
>    ? (ccl::callers 'ccl::%multiply-and-add-loop)
>    ((:INTERNAL CCL::MULTIPLY-UNSIGNED-BIGNUMS CCL::MULTIPLY-BIGNUMS))
>
>So make-xref-entry now becomes:
>
>(defun make-xref-entry (input relation)
>    (etypecase input
>      (symbol
>       ...)
>      (method
>       ...)
>      (cons
>       (case (car input)
>         ((ppc-lap-macro compiler-macro-function)
>          ...)
>+      ((:internal)
>+       (if (= (length input) 3)
>+         (make-xref-entry (nth 2 input) relation)
>+         (make-xref-entry (cadr input) relation)))
>         (t
>          )))))
>
>Bah. I feel like I should ask what these "internal" functions are.
>
>regards,
>T.
>_______________________________________________
>Openmcl-devel mailing list
>Openmcl-devel at clozure.com
>http://clozure.com/mailman/listinfo/openmcl-devel




More information about the Openmcl-devel mailing list