1 #include <stdarg.h> 2 #include <stdbool.h> 3 #include <stdint.h> 4 #include <stdlib.h> 5 6 enum FillRule { 7 A, 8 B, 9 }; 10 typedef uint8_t FillRule; 11 12 /** 13 * This will have a destructor manually implemented via variant_body, and 14 * similarly a Drop impl in Rust. 15 */ 16 struct OwnedSlice_u32 { 17 uintptr_t len; 18 uint32_t *ptr; 19 }; 20 21 struct Polygon_u32 { 22 FillRule fill; 23 struct OwnedSlice_u32 coordinates; 24 }; 25 26 /** 27 * This will have a destructor manually implemented via variant_body, and 28 * similarly a Drop impl in Rust. 29 */ 30 struct OwnedSlice_i32 { 31 uintptr_t len; 32 int32_t *ptr; 33 }; 34 35 enum Foo_u32_Tag { 36 Bar_u32, 37 Polygon1_u32, 38 Slice1_u32, 39 Slice2_u32, 40 Slice3_u32, 41 Slice4_u32, 42 }; 43 typedef uint8_t Foo_u32_Tag; 44 45 struct Polygon1_Body_u32 { 46 struct Polygon_u32 _0; 47 }; 48 49 struct Slice1_Body_u32 { 50 struct OwnedSlice_u32 _0; 51 }; 52 53 struct Slice2_Body_u32 { 54 struct OwnedSlice_i32 _0; 55 }; 56 57 struct Slice3_Body_u32 { 58 FillRule fill; 59 struct OwnedSlice_u32 coords; 60 }; 61 62 struct Slice4_Body_u32 { 63 FillRule fill; 64 struct OwnedSlice_i32 coords; 65 }; 66 67 struct Foo_u32 { 68 Foo_u32_Tag tag; 69 union { 70 struct Polygon1_Body_u32 polygon1; 71 struct Slice1_Body_u32 slice1; 72 struct Slice2_Body_u32 slice2; 73 struct Slice3_Body_u32 slice3; 74 struct Slice4_Body_u32 slice4; 75 }; 76 }; 77 78 struct Polygon_i32 { 79 FillRule fill; 80 struct OwnedSlice_i32 coordinates; 81 }; 82 83 enum Baz_i32_Tag { 84 Bar2_i32, 85 Polygon21_i32, 86 Slice21_i32, 87 Slice22_i32, 88 Slice23_i32, 89 Slice24_i32, 90 }; 91 typedef uint8_t Baz_i32_Tag; 92 93 struct Polygon21_Body_i32 { 94 Baz_i32_Tag tag; 95 struct Polygon_i32 _0; 96 }; 97 98 struct Slice21_Body_i32 { 99 Baz_i32_Tag tag; 100 struct OwnedSlice_i32 _0; 101 }; 102 103 struct Slice22_Body_i32 { 104 Baz_i32_Tag tag; 105 struct OwnedSlice_i32 _0; 106 }; 107 108 struct Slice23_Body_i32 { 109 Baz_i32_Tag tag; 110 FillRule fill; 111 struct OwnedSlice_i32 coords; 112 }; 113 114 struct Slice24_Body_i32 { 115 Baz_i32_Tag tag; 116 FillRule fill; 117 struct OwnedSlice_i32 coords; 118 }; 119 120 union Baz_i32 { 121 Baz_i32_Tag tag; 122 struct Polygon21_Body_i32 polygon21; 123 struct Slice21_Body_i32 slice21; 124 struct Slice22_Body_i32 slice22; 125 struct Slice23_Body_i32 slice23; 126 struct Slice24_Body_i32 slice24; 127 }; 128 129 enum Taz_Tag { 130 Bar3, 131 Taz1, 132 Taz3, 133 }; 134 typedef uint8_t Taz_Tag; 135 136 struct Taz1_Body { 137 Taz_Tag tag; 138 int32_t _0; 139 }; 140 141 struct Taz3_Body { 142 Taz_Tag tag; 143 struct OwnedSlice_i32 _0; 144 }; 145 146 union Taz { 147 Taz_Tag tag; 148 struct Taz1_Body taz1; 149 struct Taz3_Body taz3; 150 }; 151 152 enum Tazz_Tag { 153 Bar4, 154 Taz2, 155 }; 156 typedef uint8_t Tazz_Tag; 157 158 struct Taz2_Body { 159 Tazz_Tag tag; 160 int32_t _0; 161 }; 162 163 union Tazz { 164 Tazz_Tag tag; 165 struct Taz2_Body taz2; 166 }; 167 168 enum Tazzz_Tag { 169 Bar5, 170 Taz5, 171 }; 172 typedef uint8_t Tazzz_Tag; 173 174 struct Taz5_Body { 175 Tazzz_Tag tag; 176 int32_t _0; 177 }; 178 179 union Tazzz { 180 Tazzz_Tag tag; 181 struct Taz5_Body taz5; 182 }; 183 184 enum Tazzzz_Tag { 185 Taz6, 186 Taz7, 187 }; 188 typedef uint8_t Tazzzz_Tag; 189 190 struct Taz6_Body { 191 Tazzzz_Tag tag; 192 int32_t _0; 193 }; 194 195 struct Taz7_Body { 196 Tazzzz_Tag tag; 197 uint32_t _0; 198 }; 199 200 union Tazzzz { 201 Tazzzz_Tag tag; 202 struct Taz6_Body taz6; 203 struct Taz7_Body taz7; 204 }; 205 206 void root(const struct Foo_u32 *a, 207 const union Baz_i32 *b, 208 const union Taz *c, 209 union Tazz d, 210 const union Tazzz *e, 211 const union Tazzzz *f); 212