Tour de WebAssembly Table des Matières

Appel de fonctions

Lorsque nous voulons appeler une fonction dynamique, nous avons besoin de connaître sa position (fn_handle dans le code) dans le tableau contenant les fonctions dynamiques ainsi que ses arguments.

Encore une fois, étant donné que WebAssembly ne peut transmettre que des nombres et que tous les nombres en JavaScript sont des flottants 64 bits, la signature de la fonction pour l'appel des fonctions dynamiques est donc:

js_invoke_with_2_params(fn_handle:f64, a:f64, b:f64) -> f64

Notre code Rust devient:

let log_handle = register_function("
  (param_a, param_b) => {
    // appel de console_log ici
  }");

let msg = "hello world";

js_invoke_with_2_params( log_handle,msg.as_ptr() as f64, 
    msg.len() as f64 );

Il y a cependant un problème. En effet, notre fonction JavaScript à appeler (celle affichant le console log) doit récupérer le message à afficher depuis la mémoire. Elle connait la postition du message dans la mémoire ainsi que sa taille, mais comment récupérer le message? Nous utiliserons pour cela un contexte!

Mascot Ferris