master: describe: alien types and callbacks

stassats via Sbcl-commits <[email protected]>
Newsgroups gmane.lisp.steel-bank.cvs
Message-ID <[email protected]>
The branch "master" has been updated in SBCL:
       via  7a6a70dbb834a3428627548ed2ff1353aa85cf06 (commit)
      from  1434677ca0825f78891e77a37a19064eb19046e3 (commit)

- Log -----------------------------------------------------------------
commit 7a6a70dbb834a3428627548ed2ff1353aa85cf06
Author: Stas Boukarev <[email protected]>
Date:   Thu Apr 30 15:21:31 2026 +0300

    describe: alien types and callbacks
---
 src/code/describe.lisp         | 20 ++++++++++++++++++++
 src/cold/build-order.lisp-expr |  2 +-
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/src/code/describe.lisp b/src/code/describe.lisp
index a1dfa93b7..e94d2683e 100644
--- a/src/code/describe.lisp
+++ b/src/code/describe.lisp
@@ -316,10 +316,13 @@
   ;; if one exists. Maybe not all the exports, etc, but the package
   ;; documentation.
   (describe-function symbol nil stream)
+  (describe-alien-callback symbol stream)
+
   (describe-class symbol nil stream)
 
   ;; Type specifier
   (describe-type symbol stream)
+  (describe-alien-type symbol stream)
 
   ;; Declaration specifier
   (describe-declaration symbol stream)
@@ -753,6 +756,23 @@
              (describe-deprecation 'type name stream)
              (describe-documentation name 'type stream (eq t fun)))))))
 
+(defun describe-alien-type (name stream)
+  (let ((type (ignore-errors (sb-alien-internals:parse-alien-type name nil))))
+    (when type
+      (describe-block (stream "~A names an alien type:" name)
+        (format stream "~@:_Expansion: ~S" type)))))
+
+(defun describe-alien-callback (name stream)
+  (let ((cb (gethash name sb-alien::*alien-callables*)))
+    (when cb
+      (describe-block (stream "~A names an alien callback:" name)
+        (format stream "~@:_Type: ~S" (sb-alien::alien-value-type cb))
+        (let ((index (sb-alien::alien-callback-index cb)))
+          (when (and index
+                     (array-in-bounds-p sb-alien::*alien-callback-functions* index))
+            (let ((fun (aref sb-alien::*alien-callback-functions* index)))
+              (describe-function-source fun stream))))))))
+
 (defun describe-declaration (name stream)
   (let ((kind (cond
                 ((member name '(ignore ignorable
diff --git a/src/cold/build-order.lisp-expr b/src/cold/build-order.lisp-expr
index bbfb9d609..7d5fa64ce 100644
--- a/src/cold/build-order.lisp-expr
+++ b/src/cold/build-order.lisp-expr
@@ -713,7 +713,6 @@
   ;; other functionality not needed for cold init, moved
   ;; to warm init to reduce peak memory requirement in
   ;; cold init
-  "src/code/describe"
 
   "src/code/describe-policy"
   "src/code/inspect"
@@ -722,6 +721,7 @@
   "src/code/step"
   "src/code/warm-lib"
   "src/code/alien-callback"
+  "src/code/describe"
   "src/code/run-program"
   #+win32 "src/code/warm-mswin"
   "src/code/traceroot"

-----------------------------------------------------------------------


hooks/post-receive
-- 
SBCL
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.