(ret: &mut String, name: &Id, s: &RecordDatatype)
| 172 | } |
| 173 | |
| 174 | fn print_record(ret: &mut String, name: &Id, s: &RecordDatatype) { |
| 175 | if let Some(repr) = s.bitflags_repr() { |
| 176 | ret.push_str(&format!( |
| 177 | "enum __wasi_{}_t : {} {{\n", |
| 178 | ident_name(name), |
| 179 | intrepr_name(repr) |
| 180 | )); |
| 181 | ret.push_str("\n"); |
| 182 | for (i, member) in s.members.iter().enumerate() { |
| 183 | if !member.docs.is_empty() { |
| 184 | ret.push_str(" /**\n"); |
| 185 | for line in member.docs.lines() { |
| 186 | ret.push_str(&format!(" * {}\n", line)); |
| 187 | } |
| 188 | ret.push_str(" */\n"); |
| 189 | } |
| 190 | ret.push_str(&format!( |
| 191 | " __WASI_{}_{} = 1ULL << {},\n", |
| 192 | ident_name(name).to_shouty_snake_case(), |
| 193 | ident_name(&member.name).to_shouty_snake_case(), |
| 194 | i, |
| 195 | )); |
| 196 | ret.push_str("\n"); |
| 197 | } |
| 198 | ret.push_str(&format!( |
| 199 | "}};\nDEFINE_ENUM_OPERATORS(__wasi_{}_t)\n\n", |
| 200 | ident_name(name) |
| 201 | )); |
| 202 | ret.push_str(&format!( |
| 203 | "static_assert(sizeof(__wasi_{}_t) == {}, \"witx calculated size\");\n", |
| 204 | ident_name(name), |
| 205 | repr.mem_size() |
| 206 | )); |
| 207 | ret.push_str(&format!( |
| 208 | "static_assert(alignof(__wasi_{}_t) == {}, \"witx calculated align\");\n", |
| 209 | ident_name(name), |
| 210 | repr.mem_align() |
| 211 | )); |
| 212 | ret.push_str("\n"); |
| 213 | return; |
| 214 | } |
| 215 | |
| 216 | ret.push_str(&format!("struct __wasi_{}_t {{\n", ident_name(name))); |
| 217 | |
| 218 | for member in &s.members { |
| 219 | if !member.docs.is_empty() { |
| 220 | ret.push_str(" /**\n"); |
| 221 | for line in member.docs.lines() { |
| 222 | ret.push_str(&format!(" * {}\n", line)); |
| 223 | } |
| 224 | ret.push_str(" */\n"); |
| 225 | } |
| 226 | ret.push_str(&format!( |
| 227 | " {} {};\n", |
| 228 | typeref_name(&member.tref), |
| 229 | ident_name(&member.name) |
| 230 | )); |
| 231 | ret.push_str("\n"); |
no test coverage detected