summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2017-06-26 07:22:06 -0700
committerKaz Kylheku <kaz@kylheku.com>2017-06-26 07:22:06 -0700
commit92c0048854d91da1a1e5e49634b98a36a479f3b2 (patch)
treecedc4002d26feffb0b598121c452e40099ba5973 /share
parent1402a54bd0596d4530e4c8aba1cf890553e905ec (diff)
downloadtxr-92c0048854d91da1a1e5e49634b98a36a479f3b2.tar.gz
txr-92c0048854d91da1a1e5e49634b98a36a479f3b2.tar.bz2
txr-92c0048854d91da1a1e5e49634b98a36a479f3b2.zip
ffi: new macro, deffi-sym.
* lisplib.c (ffi_set_entries): Add deffi-sym to autload list. * share/txr/stdlib/ffi.tl (deffi-sym): New macro. * txr.1: Documented.
Diffstat (limited to 'share')
-rw-r--r--share/txr/stdlib/ffi.tl12
1 files changed, 12 insertions, 0 deletions
diff --git a/share/txr/stdlib/ffi.tl b/share/txr/stdlib/ffi.tl
index a041692f..a430f777 100644
--- a/share/txr/stdlib/ffi.tl
+++ b/share/txr/stdlib/ffi.tl
@@ -96,6 +96,18 @@
(defmacro deffi-cb-unsafe (:form f name rettype argtypes)
(sys:deffi-cb-expander f name rettype argtypes nil nil))
+(defmacro deffi-sym (:form f name var-expr : type-sym)
+ (let ((var-ref (cond
+ ((stringp var-expr)
+ ^(dlsym-checked sys:ffi-lib ,var-expr))
+ ((consp var-expr)
+ (mac-param-bind f (sym ver) var-expr
+ ^(dlvsym-checked sys:ffi-lib ,sym ,ver)))
+ (t var-expr))))
+ ^(defparml ,name ,(if type-sym
+ ^(cptr-cast ',type-sym ,var-ref)
+ var-ref))))
+
(defmacro deffi-var (:form f name var-expr type)
(let ((var-ref (cond
((stringp var-expr)