Assemblyscript: Ошибка компиляции при попытке использовать call_indirect

Созданный на 19 дек. 2019  ·  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 (просто массив обратных вызовов) и предоставлять метод invokeCallback(callbackId: i32): void модулю wasm.
2) Добавьте в компилятор параметр --tableBase , чтобы пользователь мог зарезервировать некоторое место в таблице специально для обратных вызовов. Может работать, но, вероятно, усложнит работу со стороны компилятора.

В любом случае, не стесняйтесь закрывать этот выпуск. Единственное, что call_indirect и call_direct следует удалить из index.d.ts если они не будут добавлены обратно в функцию.

Да, они были удалены из-за ожидаемых проблем с реализацией закрытия. Но еще можно сделать это:

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

соответственно

var tableIndex = changetype<usize>(someFunction);

исправлено в # 1017

Была ли эта страница полезной?
0 / 5 - 0 рейтинги