call
call
ruft eine Funktion auf, wobei return_call
die Tail-Call-Version davon ist. call_indirect
ruft eine Funktion in einer Tabelle auf, wobei return_call_indirect
ebenfalls als Tail-Call-Version dient.
Beispiele
Aufrufen der greet
-Funktion, die aus JavaScript importiert wurde, unter Verwendung von call
:
Probieren Sie es aus
(module
;; Import the `greet` function from the environment
(import "env" "greet" (func $greet))
(func
;; Call the imported `greet` function
call $greet
)
;; Automatically run the first function when the module starts
(start 1)
)
const url = "{%wasm-url%}";
await WebAssembly.instantiateStreaming(fetch(url), {
env: {
greet: function () {
console.log("Hello");
// Expected output: "Hello"
},
},
});
Berechnen der Fakultät einer Zahl unter Verwendung von return_call
und Protokollierung des Ergebnisses mit der exportierten fac
-Funktion:
Probieren Sie es aus
(module
;; Calculate the factorial of a number
(func $fac (export "fac") (param $x i64) (result i64)
;; Call the `fac-aux` function with $x and 1 parameters
(return_call $fac-aux (local.get $x) (i64.const 1))
)
;; Perform the factorial calculation
(func $fac-aux (param $x i64) (param $r i64) (result i64)
;; If $x is zero, return the accumulated result $r
(if (result i64) (i64.eqz (local.get $x))
(then (return (local.get $r)))
(else
;; Otherwise, recursively call `fac-aux` with $x-1 and $x*$r
(return_call $fac-aux
(i64.sub (local.get $x) (i64.const 1))
(i64.mul (local.get $x) (local.get $r))
)
)
)
)
)
const url = "{%wasm-url%}";
const { instance } = await WebAssembly.instantiateStreaming(fetch(url));
const result = instance.exports.fac(5n);
console.log(result);
// Expected output: 120n
Syntax
wasm
call $greet
Anweisung | Binärer Opcode |
---|---|
call |
0x10 |
call_indirect |
0x11 |
return_call |
0x12 |
return_call_indirect |
0x13 |