index.d.ts
記述されているにもかかわらず、その使用法はコンパイル中にエラー「 ERROR TS2304: Cannot find name 'call_indirect'
」を生成します。 同じことがcall_direct
ます。
ここで削除されたようです-https ://github.com/AssemblyScript/assemblyscript/pull/974。 代替品はありますか/ありますか? 私の場合、JS側から提供されたコールバックをwasmクラスに関連付ける必要があります。 私の計画は、テーブルをwasmモジュールに渡し( --importTable
フラグを使用)、次にcall_indirect( this.callbackId )
ようなものを使用して呼び出すこと
いくつかの検討の結果、私は2つの可能な解決策を思いつきました。
1)JSでコールバックテーブル(コールバックの配列のみ)を維持し、wasmモジュールにinvokeCallback(callbackId: i32): void
メソッドを提供します。
2)コンパイラに--tableBase
オプションを追加して、ユーザーが特にコールバック用にテーブル内のスペースを予約できるようにします。 動作する可能性がありますが、コンパイラ側で問題が発生する可能性があります。
とにかく、この問題を自由に閉じてください。 唯一のことは、 call_indirect
とcall_direct
が機能に追加されない場合は、それらをindex.d.ts
から削除する必要があるということです。
ええ、これらはクロージャの実装で予想される問題のために削除されました。 しかし、それでもこれを行うことができます:
changetype<(a: i32, b: i32) => i32>(someTableIndex)(1, 2);
それぞれ
var tableIndex = changetype<usize>(someFunction);
#1017で修正
最も参考になるコメント
ええ、これらはクロージャの実装で予想される問題のために削除されました。 しかし、それでもこれを行うことができます:
それぞれ