ca7a942ce5
The common `tag` should already be enough, al other tags are identical to it. In Cython case they only create noise because the declarations only introduce names and do not determine layouts.
63 lines
1016 B
Cython
63 lines
1016 B
Cython
#define MY_ASSERT(...) do { } while (0)
|
|
#define MY_ATTRS __attribute((noinline))
|
|
|
|
|
|
from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
|
|
from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
|
|
cdef extern from *:
|
|
ctypedef bint bool
|
|
ctypedef struct va_list
|
|
|
|
cdef extern from *:
|
|
|
|
ctypedef struct I:
|
|
pass
|
|
|
|
cdef enum:
|
|
H_Foo,
|
|
H_Bar,
|
|
H_Baz,
|
|
ctypedef uint8_t H_Tag;
|
|
|
|
ctypedef struct H_Bar_Body:
|
|
uint8_t x;
|
|
int16_t y;
|
|
|
|
ctypedef struct H:
|
|
H_Tag tag;
|
|
int16_t foo;
|
|
H_Bar_Body bar;
|
|
|
|
cdef enum:
|
|
J_Foo,
|
|
J_Bar,
|
|
J_Baz,
|
|
ctypedef uint8_t J_Tag;
|
|
|
|
ctypedef struct J_Bar_Body:
|
|
uint8_t x;
|
|
int16_t y;
|
|
|
|
ctypedef struct J:
|
|
J_Tag tag;
|
|
int16_t foo;
|
|
J_Bar_Body bar;
|
|
|
|
cdef enum:
|
|
K_Foo,
|
|
K_Bar,
|
|
K_Baz,
|
|
ctypedef uint8_t K_Tag;
|
|
|
|
ctypedef struct K_Bar_Body:
|
|
K_Tag tag;
|
|
uint8_t x;
|
|
int16_t y;
|
|
|
|
ctypedef union K:
|
|
K_Tag tag;
|
|
int16_t foo;
|
|
K_Bar_Body bar;
|
|
|
|
void foo(H h, I i, J j, K k);
|