#define NOINLINE __attribute__((noinline)) #define NODISCARD [[nodiscard]] #include #include #include #include enum FillRule #ifdef __cplusplus : uint8_t #endif // __cplusplus { A, B, }; #ifndef __cplusplus typedef uint8_t FillRule; #endif // __cplusplus /** * This will have a destructor manually implemented via variant_body, and * similarly a Drop impl in Rust. */ typedef struct OwnedSlice_u32 { uintptr_t len; uint32_t *ptr; } OwnedSlice_u32; typedef struct Polygon_u32 { FillRule fill; struct OwnedSlice_u32 coordinates; } Polygon_u32; /** * This will have a destructor manually implemented via variant_body, and * similarly a Drop impl in Rust. */ typedef struct OwnedSlice_i32 { uintptr_t len; int32_t *ptr; } OwnedSlice_i32; enum Foo_u32_Tag #ifdef __cplusplus : uint8_t #endif // __cplusplus { Bar_u32, Polygon1_u32, Slice1_u32, Slice2_u32, Slice3_u32, Slice4_u32, }; #ifndef __cplusplus typedef uint8_t Foo_u32_Tag; #endif // __cplusplus typedef struct Slice3_Body_u32 { FillRule fill; struct OwnedSlice_u32 coords; } Slice3_Body_u32; typedef struct Slice4_Body_u32 { FillRule fill; struct OwnedSlice_i32 coords; } Slice4_Body_u32; typedef struct Foo_u32 { Foo_u32_Tag tag; union { struct { struct Polygon_u32 polygon1; }; struct { struct OwnedSlice_u32 slice1; }; struct { struct OwnedSlice_i32 slice2; }; Slice3_Body_u32 slice3; Slice4_Body_u32 slice4; }; } Foo_u32; typedef struct Polygon_i32 { FillRule fill; struct OwnedSlice_i32 coordinates; } Polygon_i32; enum Baz_i32_Tag #ifdef __cplusplus : uint8_t #endif // __cplusplus { Bar2_i32, Polygon21_i32, Slice21_i32, Slice22_i32, Slice23_i32, Slice24_i32, }; #ifndef __cplusplus typedef uint8_t Baz_i32_Tag; #endif // __cplusplus typedef struct Slice23_Body_i32 { Baz_i32_Tag tag; FillRule fill; struct OwnedSlice_i32 coords; } Slice23_Body_i32; typedef struct Slice24_Body_i32 { Baz_i32_Tag tag; FillRule fill; struct OwnedSlice_i32 coords; } Slice24_Body_i32; typedef union Baz_i32 { Baz_i32_Tag tag; struct { Baz_i32_Tag polygon21_tag; struct Polygon_i32 polygon21; }; struct { Baz_i32_Tag slice21_tag; struct OwnedSlice_i32 slice21; }; struct { Baz_i32_Tag slice22_tag; struct OwnedSlice_i32 slice22; }; Slice23_Body_i32 slice23; Slice24_Body_i32 slice24; } Baz_i32; enum Taz_Tag #ifdef __cplusplus : uint8_t #endif // __cplusplus { Bar3, Taz1, Taz3, }; #ifndef __cplusplus typedef uint8_t Taz_Tag; #endif // __cplusplus typedef union Taz { Taz_Tag tag; struct { Taz_Tag taz1_tag; int32_t taz1; }; struct { Taz_Tag taz3_tag; struct OwnedSlice_i32 taz3; }; } Taz; enum Tazz_Tag #ifdef __cplusplus : uint8_t #endif // __cplusplus { Bar4, Taz2, }; #ifndef __cplusplus typedef uint8_t Tazz_Tag; #endif // __cplusplus typedef union Tazz { Tazz_Tag tag; struct { Tazz_Tag taz2_tag; int32_t taz2; }; } Tazz; enum Tazzz_Tag #ifdef __cplusplus : uint8_t #endif // __cplusplus { Bar5, Taz5, }; #ifndef __cplusplus typedef uint8_t Tazzz_Tag; #endif // __cplusplus typedef union Tazzz { Tazzz_Tag tag; struct { Tazzz_Tag taz5_tag; int32_t taz5; }; } Tazzz; enum Tazzzz_Tag #ifdef __cplusplus : uint8_t #endif // __cplusplus { Taz6, Taz7, }; #ifndef __cplusplus typedef uint8_t Tazzzz_Tag; #endif // __cplusplus typedef union Tazzzz { Tazzzz_Tag tag; struct { Tazzzz_Tag taz6_tag; int32_t taz6; }; struct { Tazzzz_Tag taz7_tag; uint32_t taz7; }; } Tazzzz; enum Qux_Tag #ifdef __cplusplus : uint8_t #endif // __cplusplus { Qux1, Qux2, }; #ifndef __cplusplus typedef uint8_t Qux_Tag; #endif // __cplusplus typedef union Qux { Qux_Tag tag; struct { Qux_Tag qux1_tag; int32_t qux1; }; struct { Qux_Tag qux2_tag; uint32_t qux2; }; } Qux; #ifdef __cplusplus extern "C" { #endif // __cplusplus void root(const struct Foo_u32 *a, const union Baz_i32 *b, const union Taz *c, union Tazz d, const union Tazzz *e, const union Tazzzz *f, const union Qux *g); #ifdef __cplusplus } // extern "C" #endif // __cplusplus