diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2017-06-26 07:22:06 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2017-06-26 07:22:06 -0700 |
commit | 92c0048854d91da1a1e5e49634b98a36a479f3b2 (patch) | |
tree | cedc4002d26feffb0b598121c452e40099ba5973 /share | |
parent | 1402a54bd0596d4530e4c8aba1cf890553e905ec (diff) | |
download | txr-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.tl | 12 |
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) |