summaryrefslogtreecommitdiffstats
path: root/ffi.h
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2017-05-17 05:50:11 -0700
committerKaz Kylheku <kaz@kylheku.com>2017-05-17 05:50:11 -0700
commit27514a0cde3a43f5c54c50a6899fb3a4666390ca (patch)
treec384b39596a851aa2330de70456d25e4b0f38fb2 /ffi.h
parentabc64add6a46971c3ccf422b1daae01f82f98d25 (diff)
downloadtxr-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.h16
1 files changed, 15 insertions, 1 deletions
diff --git a/ffi.h b/ffi.h
index 4364a615..0d82f29d 100644
--- a/ffi.h
+++ b/ffi.h
@@ -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);