diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2017-05-17 05:50:11 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2017-05-17 05:50:11 -0700 |
commit | 27514a0cde3a43f5c54c50a6899fb3a4666390ca (patch) | |
tree | c384b39596a851aa2330de70456d25e4b0f38fb2 /ffi.h | |
parent | abc64add6a46971c3ccf422b1daae01f82f98d25 (diff) | |
download | txr-27514a0cde3a43f5c54c50a6899fb3a4666390ca.tar.gz txr-27514a0cde3a43f5c54c50a6899fb3a4666390ca.tar.bz2 txr-27514a0cde3a43f5c54c50a6899fb3a4666390ca.zip |
ffi: carray type to round out semantics.
The carray type deals with C array passing conventions
as a pointer to the first element of an array of
unknown size. It fills in the functionality gap not
covered by array and varray.
* ffi.c (carray_s): New symbol variable.
(ffi_carray_get, ffi_carray_put): New static functions.
(ffi_type_compile): Handle (carray <type>) syntax.
(struct carray): New struct type.
(carray_struct, carray_struct_checked, carray_print_op,
carray_mark_op, carray_destroy_op): New static functions.
(carray_borrowed_ops, carray_owned_ops): New static structs.
(make_carray, carray_set_length, carray_dup, carray_own,
carray_free, carray_type, length_carray, carray_get,
carray_vec, carray_blank, vec_carray, list_carray, carray_ref,
carray_refset): New functions.
(ffi_init): Initialize carray_s. Register
carray-set_length, carray_dup, carray_own,
carray-free, carray_type, length_carray,
carray-vec, array_blank, vec_carray, list_carray, carray_ref
and carray-refset intrinsics.
* ffi.h (carray_s): Declared.
(make_carray, carray_set_length, carray_dup, carray_own,
carray_free, carray_type, length_carray, carray_get,
carray_vec, carray_blank, vec_carray, list_carray, carray_ref,
carray_refset): Declared.
Diffstat (limited to 'ffi.h')
-rw-r--r-- | ffi.h | 16 |
1 files changed, 15 insertions, 1 deletions
@@ -37,7 +37,7 @@ extern val long_s, ulong_s; extern val void_s; extern val double_s; -extern val array_s, zarray_s; +extern val array_s, zarray_s, carray_s; extern val struct_s; @@ -63,4 +63,18 @@ val ffi_put(val obj, val type); val ffi_in(val srcbuf, val obj, val type, val copy_p); val ffi_get(val srcbuf, val type); val ffi_out(val dstbuf, val obj, val type, val copy_p); +val make_carray(val type, mem_t *data, cnum nelem); +val carray_set_length(val carray, val nelem); +val carray_dup(val carray); +val carray_own(val carray); +val carray_free(val carray); +val carray_type(val carray); +val length_carray(val carray); +mem_t *carray_get(val carray, val type, val self); +val carray_vec(val vec, val type, val null_term_p); +val carray_blank(val nelem, val type); +val vec_carray(val carray, val null_term_p); +val list_carray(val carray, val null_term_p); +val carray_ref(val carray, val idx); +val carray_refset(val carray, val idx, val newval); void ffi_init(void); |