Assemblyscript: call_indirectを使用しようとしたときのコンパイルエラー

作成日 2019年12月19日  ·  4コメント  ·  ソース: AssemblyScript/assemblyscript

index.d.ts記述されているにもかかわらず、その使用法はコンパイル中にエラー「 ERROR TS2304: Cannot find name 'call_indirect' 」を生成します。 同じことがcall_directます。

最も参考になるコメント

ええ、これらはクロージャの実装で予想される問題のために削除されました。 しかし、それでもこれを行うことができます:

changetype<(a: i32, b: i32) => i32>(someTableIndex)(1, 2);

それぞれ

var tableIndex = changetype<usize>(someFunction);

全てのコメント4件

ここで削除されたようです-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_indirectcall_directが機能に追加されない場合は、それらをindex.d.tsから削除する必要があるということです。

ええ、これらはクロージャの実装で予想される問題のために削除されました。 しかし、それでもこれを行うことができます:

changetype<(a: i32, b: i32) => i32>(someTableIndex)(1, 2);

それぞれ

var tableIndex = changetype<usize>(someFunction);

#1017で修正

このページは役に立ちましたか?
0 / 5 - 0 評価