Несмотря на то, что это описано в 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 (просто массив обратных вызовов) и предоставлять метод 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
Самый полезный комментарий
Да, они были удалены из-за ожидаемых проблем с реализацией закрытия. Но еще можно сделать это:
соответственно