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.
Note: 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.
elem.drop identifier
elem.dropThe elem.drop instruction type. Must always be included first.
identifierThe identifier for the elem you want to drop. This can be one of the following:
nameAn identifying name set for the elem when it was first defined. This must begin with a $ symbol, for example $my_elem.
indexThe elem's index number, for example 0 for the first elem in the wasm module, 1 for the second, etc.
[] -> []
| Instruction | Binary format | Example text => binary |
|---|---|---|
elem.drop | 0xfc 13:u32 x:elemidx | elem.drop 0 => 0xfc 0x0d 0x00 |
table definitionelem definition