From 27514a0cde3a43f5c54c50a6899fb3a4666390ca Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Wed, 17 May 2017 05:50:11 -0700 Subject: 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 ) 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. --- ffi.h | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'ffi.h') 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); -- cgit v1.2.3