A pesar de que se describe en el index.d.ts
su uso produce un error " ERROR TS2304: Cannot find name 'call_indirect'
" durante la compilación. Lo mismo ocurre con call_direct
.
Parece que se eliminaron aquí: https://github.com/AssemblyScript/assemblyscript/pull/974. ¿Hay o habrá reemplazos? En mi caso, necesito asociar una devolución de llamada proporcionada desde el lado JS con una clase wasm. Mi plan era pasar una tabla al módulo wasm (usando una bandera --importTable
) y luego llamarlo usando algo como call_indirect( this.callbackId )
Después de algunas consideraciones, se me ocurrieron 2 posibles soluciones:
1) Mantenga la tabla de devolución de llamada en JS (solo una matriz de devoluciones de llamada) y proporcione el método invokeCallback(callbackId: i32): void
al módulo wasm.
2) Agregue una opción --tableBase
al compilador, para que el usuario pueda reservar algo de espacio en la tabla específicamente para devoluciones de llamada. Puede funcionar, pero probablemente complicará las cosas en el lado del compilador.
De todos modos, no dude en cerrar este problema. Lo único es que call_indirect
y call_direct
deben eliminarse de index.d.ts
si no se vuelven a agregar en la función
Sí, estos se han eliminado debido a problemas esperados con una implementación de cierre. Pero todavía se puede hacer esto:
changetype<(a: i32, b: i32) => i32>(someTableIndex)(1, 2);
respectivamente
var tableIndex = changetype<usize>(someFunction);
arreglado en # 1017
Comentario más útil
Sí, estos se han eliminado debido a problemas esperados con una implementación de cierre. Pero todavía se puede hacer esto:
respectivamente