HATEBIN
>
when isMainModule: const nameStr = "test_$1" static: setFormatter(nameStr) {.pragma: exporter, cdecl, dynlib, exportc: nameStr.} type MyInt = distinct int MyType = object x, y: int z: float MyOtherType = object x, y: uint8 z: float u: ref MyType dist: MyInt bleh: set[char] meh: set[0..16] blerg: (int, int, float, bool) proc doThing( oa: openArray[int]; otherOa: openArray[cstring]; typ: MyOtherType; a, b: seq[float32]; ): cstring {.exporter expose.} = discard makeHeader("test.h") #[ Generates: #include
#include
struct test_tuple_int_int_float_bool { intptr_t field0; intptr_t field1; double field2; bool field3; }; struct test_MyType { intptr_t x; intptr_t y; double z; }; struct test_MyOtherType { uint8_t x; uint8_t y; double z; struct test_MyType *u; intptr_t dist; uint8_t bleh[32]; uint16_t meh; struct test_tuple_int_int_float_bool blerg; }; struct test_seq_data_float32 { intptr_t capacity; float data[]; }; struct test_seq_float32 { intptr_t len; float *data; }; char *test_doThing(intptr_t *oa_data, intptr_t oa_len, char **otherOa_data, intptr_t otherOa_len, struct test_MyOtherType typ, struct seq_float32, struct seq_float32); ]#