Skip to content

Commit 551358b

Browse files
committed
implement FuncTranslator::visit_block trait method
1 parent f212b8e commit 551358b

File tree

1 file changed

+12
-4
lines changed
  • crates/wasmi/src/engine/translator/func2

1 file changed

+12
-4
lines changed

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
use super::{ControlFrame, FuncTranslator, LocalIdx};
2-
use crate::{core::wasm, ir::Instruction, Error};
1+
use super::{ControlFrame, FuncTranslator, LocalIdx, UnreachableControlFrame};
2+
use crate::{core::wasm, engine::BlockType, ir::Instruction, Error};
33
use wasmparser::VisitOperator;
44

55
macro_rules! impl_visit_operator {
@@ -72,8 +72,16 @@ impl<'a> VisitOperator<'a> for FuncTranslator {
7272
todo!()
7373
}
7474

75-
fn visit_block(&mut self, _block_ty: wasmparser::BlockType) -> Self::Output {
76-
todo!()
75+
fn visit_block(&mut self, block_ty: wasmparser::BlockType) -> Self::Output {
76+
if !self.reachable {
77+
self.stack
78+
.push_unreachable(UnreachableControlFrame::Block)?;
79+
return Ok(());
80+
}
81+
let block_ty = BlockType::new(block_ty, &self.module);
82+
let end_label = self.labels.new_label();
83+
self.stack.push_block(block_ty, end_label)?;
84+
Ok(())
7785
}
7886

7987
fn visit_loop(&mut self, _block_ty: wasmparser::BlockType) -> Self::Output {

0 commit comments

Comments
 (0)