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.
WebAssembly.customSections()
関数はモジュールと文字列名を指定して、すべてのカスタムセクションのコンテンツのコピーを返します。
構文
WebAssembly.Module.customSections(module, sectionName);
引数
- module
-
カスタムセクションを考慮する
WebAssembly.Module
オブジェクト。 - sectionName
-
目的のカスタムセクションの文字列名。
返値
sectionName
に一致するすべてのカスタムセクションの ArrayBuffer
コピーの配列 (空の場合もあります)。
例外
module
が WebAssembly.Module
オブジェクトのインスタンスでない場合、TypeError
が発生します。
解説
wasm モジュールは一連の セクション で構成されています。これらのセクションのほとんどは wasm の仕様によって完全に指定、検証されますが、検証中に無視されスキップされる カスタムセクション をモジュールに含めることができます (通常のセクション ("既知のセクション") とカスタムセクションを区別するための情報は 高レベルの構造 を読んでください)。
これにより開発者は他の目的のために wasm モジュール内にカスタムデータを含めることができます。例えば、開発者がモジュール内の全ての関数とローカル変数に名前を付けられる (ネイティブビルドにおける "シンボル" のようなもの) ネームカスタムセクション のようなものがあります 。
なお、 WebAssembly テキストフォーマットには現在新しいカスタムセクションのための構文の仕様がありません。しかし、テキストフォーマットから .wasm に変換するときに wasm にネームセクションを追加することができます。 wabt tool の一部である wast2wasm コマンドで --debug-names
オプションを指定することができ、これを指定することにより、ネームカスタムセクションを持つ .wasm に変換することができます。
wast2wasm simple-name-section.was -o simple-name-section.wasm --debug-names
例
customSections の使用
次の例では (custom-section.html のソースと動作例をご確認ください) 、読み込んだ section.wasm バイトコードをコンパイルします。
それから、WebAssembly.Module.customSections
を使用して length
が 0 より大きいかチェックして、モジュールに "name" カスタムセクションが含まれているかどうかチェックします。この例では "name" カスタムセクションが存在するため、ArrayBuffer
オブジェクトが返されます。
WebAssembly.compileStreaming(fetch("simple-name-section.wasm")).then(
function (mod) {
var nameSections = WebAssembly.Module.customSections(mod, "name");
if (nameSections.length != 0) {
console.log("Module contains a name section");
console.log(nameSections[0]);
}
},
);
仕様書
Specification |
---|
WebAssembly JavaScript Interface # dom-module-customsections |
ブラウザーの互換性
BCD tables only load in the browser