(
&mut self,
offset: ArchitectureSize,
addr: B::Operand,
tag: Int,
cases: impl IntoIterator<Item = Option<&'b Type>> + Clone,
)
| 2097 | } |
| 2098 | |
| 2099 | fn write_variant_arms_to_memory<'b>( |
| 2100 | &mut self, |
| 2101 | offset: ArchitectureSize, |
| 2102 | addr: B::Operand, |
| 2103 | tag: Int, |
| 2104 | cases: impl IntoIterator<Item = Option<&'b Type>> + Clone, |
| 2105 | ) { |
| 2106 | let payload_offset = offset + (self.bindgen.sizes().payload_offset(tag, cases.clone())); |
| 2107 | for (i, ty) in cases.into_iter().enumerate() { |
| 2108 | self.push_block(); |
| 2109 | self.emit(&Instruction::VariantPayloadName); |
| 2110 | let payload_name = self.stack.pop().unwrap(); |
| 2111 | self.emit(&Instruction::I32Const { val: i as i32 }); |
| 2112 | self.stack.push(addr.clone()); |
| 2113 | self.store_intrepr(offset, tag); |
| 2114 | if let Some(ty) = ty { |
| 2115 | self.stack.push(payload_name.clone()); |
| 2116 | self.write_to_memory(ty, addr.clone(), payload_offset); |
| 2117 | } |
| 2118 | self.finish_block(0); |
| 2119 | } |
| 2120 | } |
| 2121 | |
| 2122 | fn write_list_to_memory(&mut self, ty: &Type, addr: B::Operand, offset: ArchitectureSize) { |
| 2123 | // After lowering the list there's two i32 values on the stack |
no test coverage detected