diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2017-07-02 16:53:35 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2017-07-02 16:53:35 -0700 |
commit | db8aeddade93adde5c9e4e14888fb53a64bdc377 (patch) | |
tree | 6dfd4da1fe1b21f3e57053e19ebfe49a6d7bd0da /share | |
parent | 3d85925c3f209bed8703e4901ce3a28de89deea4 (diff) | |
download | txr-db8aeddade93adde5c9e4e14888fb53a64bdc377.tar.gz txr-db8aeddade93adde5c9e4e14888fb53a64bdc377.tar.bz2 txr-db8aeddade93adde5c9e4e14888fb53a64bdc377.zip |
ffi: new make-zstruct function and znew macro.
* ffi.c (make_zstruct): New function.
(ffi_init): Register make-zstruct instrinsic.
* ffi.h (make_zstruct): Declared.
* lisplib.c (ffi_set_entries): Add znew to autload list.
* share/txr/stdlib/ffi.tl (znew): New macro.
* txr.1: Documented make-zstruct and znew.
Diffstat (limited to 'share')
-rw-r--r-- | share/txr/stdlib/ffi.tl | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/share/txr/stdlib/ffi.tl b/share/txr/stdlib/ffi.tl index a430f777..6cf1bf5a 100644 --- a/share/txr/stdlib/ffi.tl +++ b/share/txr/stdlib/ffi.tl @@ -148,3 +148,10 @@ (define-place-macro carray-sub (carray : (from 0) (to t)) ^(sub ,carray ,from ,to)) + +(defmacro znew (type . pairs) + (if (oddp (length pairs)) + (throwf 'eval-error "~s: slot initform arguments must occur pairwise" + 'znew)) + (let ((qpairs (mappend (aret ^(',@1 ,@2)) (tuples 2 pairs)))) + ^(make-zstruct (ffi ,type) ,*qpairs))) |