WebAssembly.Tag
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since May 2022.
L'objet WebAssembly.Tag
définit un type d'exception WebAssembly qui peut être levée depuis ou vers du code WebAssembly.
Lorsqu'on crée un objet WebAssembly.Exception
, la balise (tag) définit les types de données et l'ordre des valeurs portées par l'exception. La même instance de cette balise doit être utilisée ensuite afin d'accéder aux valeurs portées par les exceptions déclenchées (par exemple, en utilisant la méthode Exception.prototype.getArg()
).
Construire une instance de Tag
crée une nouvelle balise unique. Cette balise peut ensuite être passée à un module WebAssembly pour qu'il l'importe et qui deviendra alors une balise typée, définie dans la section des balises (tag section) du module WebAssembly. On peut aussi exporter une balise définie dans un module pour l'utiliser afin d'inspecter les exceptions déclenchées par le module.
Note : Il n'est pas possible d'accéder aux valeurs d'une exception avec une autre balise qui décrirait la même structure. Il faut que ce soit exactement la même balise qui soit utilisée ! Cela permet de s'assurer que les modules WebAssembly puissent garder privées des informations sur les exceptions internes si nécessaire. Le code JavaScript peut toujours intercepter et relancer les exceptions qu'il ne peut pas inspecter.
Constructeur
WebAssembly.Tag()
-
Crée un nouvel objet
WebAssembly.Tag
.
Méthodes des instances
Tag.prototype.type()
-
Renvoie l'objet définissant le tableau des types de données de la balise (tel que défini lors de la construction).
Exemples
Le fragment de code qui suit crée une nouvelle instance de Tag
.
const tagToImport = new WebAssembly.Tag({ parameters: ["i32", "f32"] });
Dans le fragment qui suit, on illustre comment on peut passer cette balise à un module exemple.wasm lors de l'instanciation, à l'aide d'un objet d'import.
const importObject = { "extmod": {"exttag": tagToImport} }
WebAssembly.instantiateStreaming(fetch('exemple.wasm'), importObject )
.then(obj => {
…
Le module WebAssembly pourra alors importer la balise comme ceci :
(module
(import "extmod" "exttag" (tag $tagname (param i32 f32)) )
Si la balise est ensuite utilisée pour lever une exception qui atteint le code, on pourra l'utiliser pour inspecter les valeurs portées par l'exception.
Note :
Il existe d'autres façons : on pourrait aussi utiliser la balise afin de créer un objet WebAssembly.Exception
et la déclencher depuis une fonction appelée côté WebAssembly.
Spécifications
Specification |
---|
WebAssembly JavaScript Interface: Exception Handling # tag |
Compatibilité des navigateurs
BCD tables only load in the browser