#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 { uintptr_t len; uint32_t *ptr; } OwnedSlice_u32; typedef struct { FillRule fill; OwnedSlice_u32 coordinates; } Polygon_u32; /** * This will have a destructor manually implemented via variant_body, and * similarly a Drop impl in Rust. */ typedef struct { 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 { FillRule fill; OwnedSlice_u32 coords; } Slice3_Body_u32; typedef struct { FillRule fill; OwnedSlice_i32 coords; } Slice4_Body_u32; typedef struct { Foo_u32_Tag tag; union { struct { Polygon_u32 polygon1; }; struct { OwnedSlice_u32 slice1; }; struct { OwnedSlice_i32 slice2; }; Slice3_Body_u32 slice3; Slice4_Body_u32 slice4; }; } Foo_u32; typedef struct { FillRule fill; 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 { Baz_i32_Tag tag; FillRule fill; OwnedSlice_i32 coords; } Slice23_Body_i32; typedef struct { Baz_i32_Tag tag; FillRule fill; OwnedSlice_i32 coords; } Slice24_Body_i32; typedef union { Baz_i32_Tag tag; struct { Baz_i32_Tag polygon21_tag; Polygon_i32 polygon21; }; struct { Baz_i32_Tag slice21_tag; OwnedSlice_i32 slice21; }; struct { Baz_i32_Tag slice22_tag; 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_Tag tag; struct { Taz_Tag taz1_tag; int32_t taz1; }; struct { Taz_Tag taz3_tag; 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_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_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_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_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 Foo_u32 *a, const Baz_i32 *b, const Taz *c, Tazz d, const Tazzz *e, const Tazzzz *f, const Qux *g); #ifdef __cplusplus } // extern "C" #endif // __cplusplus