1. WebAssembly
  2. Reference
  3. WebAssembly control flow instructions
  4. loop

loop

The loop statement creates a label that can later be branched to with a br. The loop instruction doesn't loop by itself; you need to branch to it to actually create a loop.

The loop statement is the opposite of the block statement, in the sense that while branching to a loop jumps to the beginning of the loop, branching to a block jumps to the end of the block, that is, out of the block.

Try it

(module
 ;; import the browser console object, you'll need to pass this in from JavaScript
 (import "console" "log" (func $log (param i32)))
 (func
 ;; create a local variable and initialize it to 0
 (local $i i32)
 (loop $my_loop
 ;; add one to $i
 local.get $i
 i32.const 1
 i32.add
 local.set $i
 ;; log the current value of $i
 local.get $i
 call $log
 ;; if $i is less than 10 branch to loop
 local.get $i
 i32.const 10
 i32.lt_s
 br_if $my_loop
 )
 )
 (start 1) ;; run the first function automatically
)
const url = "{%wasm-url%}";
await WebAssembly.instantiateStreaming(fetch(url), { console });

Syntax

wat
;; label the loop so that it can be branched to
(loop $my_loop
 ;; branch to the loop.
 ;; most of the time you'll want to put this in an if statement and only branch on condition,
 ;; otherwise you have an infinite loop.
 br $my_loop
)
Instruction Binary opcode
loop 0x03

Help improve MDN

Learn how to contribute

This page was last modified on by MDN contributors.

AltStyle によって変換されたページ (->オリジナル) /