WebAssembly.Module.customSections()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since October 2017.
La méthode statique WebAssembly.Module.customSections()
renvoie un tableau qui contient les sections personnalisées (custom sections) disponibles dans un module WebAssembly et qui ont un nom donné.
Syntaxe
WebAssembly.Module.customSections(module, nomSection)
Paramètres
module
-
L'objet
WebAssembly.Module
pour lequel on veut obtenir les sections personnalisées. nomSection
-
Le nom de la section personnalisée qu'on souhaite obtenir.
Valeur de retour
Un tableau contenant des ArrayBuffer
dont chacun contient les données d'une section personnalisée du module qui correspond à nomSection
.
Exceptions
Si le module passé en argument n'est pas une instance de WebAssembly.Module
, la méthode lèvera une exception TypeError
.
Description
Un module wasm contient une série de sections. La plupart de ces sections sont spécifiées et validées par la spécification WebAssembly mais les modules peuvent contenir certaines sections « personnalisées » (custom sections) qui sont ignorées lors de la phase de validation. Pour plus d'informations, consulter l'article sur les structures de haut niveau qui détaille la structure des sections et les différences entre les sections normales (« connues ») et les sections personnalisées.
Cela permet aux développeuses et développeurs d'inclure des données personnalisées dans un module WebAssembly pour d'autres desseins. Par exemple, on peut avoir une section personnalisée name
, qui permet aux développeuses et développeurs de fournir des noms pour les fonctions et les variables locales du module (à la façon des « symboles » utilisé pour les programmes compilés).
Le format WebAssembly ne possède actuellement aucune syntaxe pour ajouter une section personnalisée. Il est toutefois possible d'ajouter une section nommée au module wasm pendant la conversion du texte vers .wasm. La commande wast2wasm
, disponible avec l'outil wabt
, possède une option --debug-names
qui permet de créer un module .wasm
avec une section personnalisée name
:
wast2wasm simple-name-section.was -o simple-name-section.wasm --debug-names
Exemples
Dans l'exemple qui suit (tiré de ce fichier source et de cette démonstration), on compile et on instancie le bytecode simple-name-section.wasm
et on importe une fonction JavaScript dans le module lors de cette étape. Ensuite, on exporte une fonction depuis le module grâce à Instance.exports
.
On faut aussi une vérification sur WebAssembly.Module.customSections
pour vérifier si celle-ci contient une section personnalisée "name"
dont on vérifie si la longueur est supérieure à 0. Ce module contenant une section name
, les appels à console.log()
sont exécutés et montrent que le tableau renvoyé par la méthode contient des objets ArrayBuffer
.
WebAssembly.compileStreaming(fetch("simple-name-section.wasm")).then((mod) => {
const nameSections = WebAssembly.Module.customSections(mod, "name");
if (nameSections.length !== 0) {
console.log("Module contains a name section");
console.log(nameSections[0]);
}
});
Spécifications
Specification |
---|
WebAssembly JavaScript Interface # dom-module-customsections |
Compatibilité des navigateurs
BCD tables only load in the browser