summaryrefslogtreecommitdiffstats
path: root/ffi.c
diff options
context:
space:
mode:
authorPaul A. Patience <paul@apatience.com>2021-10-02 01:30:37 -0400
committerKaz Kylheku <kaz@kylheku.com>2021-10-02 09:56:47 -0700
commitad102c8e19b2aa69b0647dbf1c72c9402de4c79d (patch)
tree6d27163ecb15d5c5820762f62c27f2b0dc94958b /ffi.c
parentf9fab0b2b0285aeb6e06b782886a33f2fc96e436 (diff)
downloadtxr-ad102c8e19b2aa69b0647dbf1c72c9402de4c79d.tar.gz
txr-ad102c8e19b2aa69b0647dbf1c72c9402de4c79d.tar.bz2
txr-ad102c8e19b2aa69b0647dbf1c72c9402de4c79d.zip
ffi: add cptr-carray function.
* ffi.c (cptr_carray): New function. (ffi_init): Register cptr-carray intrinsic. * ffi.h (cptr_carray): Declared. * txr.1: Documented. * stdlib/doc-syms.tl: Updated.
Diffstat (limited to 'ffi.c')
-rw-r--r--ffi.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/ffi.c b/ffi.c
index dc92c5b2..b857ecb2 100644
--- a/ffi.c
+++ b/ffi.c
@@ -5549,6 +5549,14 @@ val carray_cptr(val cptr, val type, val len)
return make_carray(type, data, nelem, nil, 0);
}
+val cptr_carray(val carray, val type_sym_in)
+{
+ val self = lit("cptr-carray");
+ struct carray *scry = carray_struct_checked(self, carray);
+ val type_sym = default_null_arg(type_sym_in);
+ return cptr_typed(scry->data, type_sym, 0);
+}
+
val vec_carray(val carray, val null_term_p)
{
val self = lit("vec-carray");
@@ -6779,6 +6787,7 @@ void ffi_init(void)
reg_fun(intern(lit("carray-buf-sync"), user_package), func_n1(carray_buf_sync));
reg_fun(intern(lit("buf-carray"), user_package), func_n1(buf_carray));
reg_fun(intern(lit("carray-cptr"), user_package), func_n3o(carray_cptr, 2));
+ reg_fun(intern(lit("cptr-carray"), user_package), func_n2o(cptr_carray, 1));
reg_fun(intern(lit("vec-carray"), user_package), func_n2o(vec_carray, 1));
reg_fun(intern(lit("list-carray"), user_package), func_n2o(list_carray, 1));
reg_fun(intern(lit("carray-ref"), user_package), func_n2(carray_ref));