Skip to content

Commit 4da16af

Browse files
committed
implement visit_if
1 parent 475c5eb commit 4da16af

File tree

1 file changed

+9
-6
lines changed
  • crates/wasmi/src/engine/translator/func2

1 file changed

+9
-6
lines changed

crates/wasmi/src/engine/translator/func2/visit.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,7 @@ impl<'a> VisitOperator<'a> for FuncTranslator {
109109
Ok(())
110110
}
111111

112-
#[allow(unused_variables)] // TODO: remove
113-
fn visit_if(&mut self, _block_ty: wasmparser::BlockType) -> Self::Output {
112+
fn visit_if(&mut self, block_ty: wasmparser::BlockType) -> Self::Output {
114113
if !self.reachable {
115114
self.stack.push_unreachable(UnreachableControlFrame::If)?;
116115
return Ok(());
@@ -130,14 +129,18 @@ impl<'a> VisitOperator<'a> for FuncTranslator {
130129
let consume_fuel_instr = self.stack.consume_fuel_instr();
131130
(reachability, consume_fuel_instr)
132131
}
133-
operand => {
134-
let condition = self.layout.operand_to_reg(operand)?;
132+
_ => {
135133
let else_label = self.labels.new_label();
134+
self.translate_br_eqz(condition, else_label)?;
136135
let reachability = IfReachability::Both { else_label };
137-
todo!()
136+
let consume_fuel_instr = self.instrs.push_consume_fuel_instr()?;
137+
(reachability, consume_fuel_instr)
138138
}
139139
};
140-
todo!()
140+
let block_ty = BlockType::new(block_ty, &self.module);
141+
self.stack
142+
.push_if(block_ty, end_label, reachability, consume_fuel_instr)?;
143+
Ok(())
141144
}
142145

143146
fn visit_else(&mut self) -> Self::Output {

0 commit comments

Comments
 (0)