[MLton] Representation of strings in the FFI
Jens Axel Søgaard
jensaxel@soegaard.net
Wed, 27 Apr 2005 10:03:32 +0200
Stephen Weeks wrote:
>>Does this mean that it isn't possible to determine the length
>>of an exported string at the C level?
>
> It is quite possible. The exported string is both a char* and a
> pointer to a MLton array, from which one can extract the length using
> GC_arrayNumElements.
Ok - the layout of arrays were described in runtime/gc.h. The length
and other GC info is to the left of contents of the array (or string).
I take it, I should use GC_arrayNumElementsp at the C level.
/* The array size is stored before the header */
static inline uint* GC_arrayNumElementsp (pointer a) {
return ((uint*)a - 2);
}
static inline int GC_arrayNumElements (pointer a) {
return *(GC_arrayNumElementsp (a));
}
--
Jens Axel Søgaard