(ret: &mut String, name: &Id, v: &Variant)
| 258 | } |
| 259 | |
| 260 | fn print_variant(ret: &mut String, name: &Id, v: &Variant) { |
| 261 | if v.is_enum() { |
| 262 | return print_enum(ret, name, v); |
| 263 | } |
| 264 | |
| 265 | ret.push_str(&format!("union __wasi_{}_u_t {{\n", ident_name(name))); |
| 266 | |
| 267 | for case in &v.cases { |
| 268 | if let Some(tref) = &case.tref { |
| 269 | if !case.docs.is_empty() { |
| 270 | ret.push_str(" /**\n"); |
| 271 | for line in case.docs.lines() { |
| 272 | ret.push_str(&format!(" * {}\n", line)); |
| 273 | } |
| 274 | ret.push_str(" */\n"); |
| 275 | } |
| 276 | ret.push_str(&format!( |
| 277 | " {} {};\n", |
| 278 | typeref_name(tref), |
| 279 | ident_name(&case.name) |
| 280 | )); |
| 281 | } |
| 282 | } |
| 283 | ret.push_str("};\n"); |
| 284 | |
| 285 | ret.push_str(&format!("struct __wasi_{}_t {{\n", ident_name(name))); |
| 286 | ret.push_str(&format!(" {} tag;\n", intrepr_name(v.tag_repr))); |
| 287 | ret.push_str(&format!(" __wasi_{}_u_t u;\n", ident_name(name))); |
| 288 | ret.push_str("};\n\n"); |
| 289 | |
| 290 | ret.push_str(&format!( |
| 291 | "static_assert(sizeof(__wasi_{}_t) == {}, \"witx calculated size\");\n", |
| 292 | ident_name(name), |
| 293 | v.mem_size() |
| 294 | )); |
| 295 | ret.push_str(&format!( |
| 296 | "static_assert(alignof(__wasi_{}_t) == {}, \"witx calculated align\");\n", |
| 297 | ident_name(name), |
| 298 | v.mem_align() |
| 299 | )); |
| 300 | ret.push_str(&format!( |
| 301 | "static_assert(offsetof(__wasi_{}_t, u) == {}, \"witx calculated union offset\");\n", |
| 302 | ident_name(name), |
| 303 | v.payload_offset() |
| 304 | )); |
| 305 | |
| 306 | ret.push_str("\n"); |
| 307 | } |
| 308 | |
| 309 | fn print_handle(ret: &mut String, name: &Id, h: &HandleDatatype) { |
| 310 | ret.push_str(&format!( |
no test coverage detected