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