;;; TOOL: run-interp (module ;; basic br test (func (export "br0") (result i32) (local i32 i32) block $exit i32.const 1 if br 1 ;; if branches introduce blocks end i32.const 1 set_local 0 ;; not executed end i32.const 1 set_local 1 get_local 0 i32.const 0 i32.eq get_local 1 i32.const 1 i32.eq i32.add return) ;; test br-ing with a depth > 0 (func (export "br1") (result i32) (local i32 i32 i32) block $outer block $inner i32.const 1 if br 2 end ;; if branches introduce blocks i32.const 1 set_local 0 ;; not executed end i32.const 1 set_local 1 ;; not executed end i32.const 1 set_local 2 get_local 0 i32.const 0 i32.eq get_local 1 i32.const 0 i32.eq i32.add get_local 2 i32.const 1 i32.eq i32.add return) ;; test br-ing to a label (func (export "br2") (result i32) block $exit block i32.const 1 if br $exit end i32.const 1 return ;; not executed end end i32.const 2 return) ;; test br-ing in a loop with an exit and continue continuation (func (export "br3") (result i32) (local i32 i32) block $exit loop $cont get_local 0 i32.const 1 i32.add set_local 0 get_local 0 i32.const 5 i32.ge_s if br $exit end get_local 0 i32.const 4 i32.eq if (br $cont) end get_local 0 set_local 1 br $cont end end get_local 1 return) ) (;; STDOUT ;;; br0() => i32:2 br1() => i32:3 br2() => i32:2 br3() => i32:3 ;;; STDOUT ;;)