↑ arvau

MDN / drop: Wasm elem instruction

The elem.drop elem instruction discards the data contained by a passive elem segment, freeing up its memory, after being used in a table.init.

Active elem segments are dropped automatically during module instantiation, and therefore are not available to drop via elem.drop.

(module
  (table $return_values 2 funcref)

  (func $f1 (result i32)
    i32.const 42
  )
  (func $f2 (result i32)
    i32.const 100
  )

  (elem $funcs funcref (ref.func $f1) (ref.func $f2))

  (func (export "init")
    i32.const 0    ;; destination table index
    i32.const 0    ;; offset into elem segment
    i32.const 2    ;; number of elements to copy
    table.init $funcs
    ;; segment data no longer needed
    elem.drop $funcs
  )

  (func (export "accessTable") (param $index i32) (result i32)
    local.get $index
    call_indirect (result i32)
  )
)
WebAssembly.instantiateStreaming(fetch("{%wasm-url%}")).then((result) => {
  result.instance.exports.init();
  const value = result.instance.exports.accessTable(1);
  console.log(value);
});

In the above example, we define a table, two functions, and an elem called $funcs that references the two functions. We then invoke table.init to copy the references from the $funcs elem over to the table. With this done, the elem is no longer needed, so we call elem.drop to free up the memory it was using.

Syntax

elem.drop identifier
  • elem.drop

    • : The elem.drop instruction type. Must always be included first.

    identifier

    • : The identifier for the elem you want to drop. This can be one of the following:

      • name

        • : An identifying name set for the elem when it was first defined. This must begin with a $ symbol, for example $my_elem.

        index

        • : The elem’s index number, for example 0 for the first elem in the wasm module, 1 for the second, etc.

Type

[] -> []

Binary encoding

InstructionBinary formatExample text => binaryelem.drop0xfc 13:u32 x:elemidxelem.drop 0 => 0xfc 0x0d 0x00

Specifications

Browser compatibility

See also