Apesar de estar descrito em index.d.ts
seu uso produz um erro " ERROR TS2304: Cannot find name 'call_indirect'
" durante a compilação. O mesmo vale para call_direct
.
Parece que eles foram removidos aqui - https://github.com/AssemblyScript/assemblyscript/pull/974. Há / haverá substituições? No meu caso, preciso associar um retorno de chamada fornecido do lado JS com uma classe wasm. Meu plano era passar uma tabela para o módulo wasm (usando um sinalizador --importTable
) e, em seguida, chamá-lo usando algo como call_indirect( this.callbackId )
Após algumas considerações, encontrei 2 soluções possíveis:
1) Manter a tabela de retorno de chamada em JS (apenas uma matriz de retornos de chamada) e fornecer o método invokeCallback(callbackId: i32): void
para o módulo wasm.
2) Adicione uma opção --tableBase
ao compilador, para que o usuário possa reservar algum espaço na tabela especificamente para callbacks. Pode funcionar, mas provavelmente complicará as coisas no lado do compilador.
De qualquer forma, fique à vontade para encerrar esta edição. A única coisa é que call_indirect
e call_direct
devem ser removidos de index.d.ts
se não forem adicionados de volta ao elemento
Sim, eles foram removidos devido a problemas esperados com a implementação de um fechamento. Mas ainda é possível fazer isso:
changetype<(a: i32, b: i32) => i32>(someTableIndex)(1, 2);
respectivamente
var tableIndex = changetype<usize>(someFunction);
corrigido em # 1017
Comentários muito úteis
Sim, eles foram removidos devido a problemas esperados com a implementação de um fechamento. Mas ainda é possível fazer isso:
respectivamente