Assemblyscript: Erreur de compilation lors de la tentative d'utilisation de call_indirect

Créé le 19 déc. 2019  ·  4Commentaires  ·  Source: AssemblyScript/assemblyscript

Malgré cela, il est décrit dans le index.d.ts son utilisation produit une erreur " ERROR TS2304: Cannot find name 'call_indirect' " lors de la compilation. Il en va de même pour call_direct .

Commentaire le plus utile

Oui, ceux-ci ont été supprimés en raison de problèmes attendus avec une implémentation de fermeture. Mais on peut encore faire ceci :

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

respectivement

var tableIndex = changetype<usize>(someFunction);

Tous les 4 commentaires

On dirait qu'ils ont été supprimés ici - https://github.com/AssemblyScript/assemblyscript/pull/974. Y a-t-il / y aura-t-il des remplaçants ? Dans mon cas, je dois associer un rappel fourni du côté JS à une classe wasm. Mon plan était de passer une table au module wasm (à l'aide d'un indicateur --importTable ), puis de l'appeler en utilisant quelque chose comme call_indirect( this.callbackId )

Après quelques réflexions, j'ai proposé 2 solutions possibles :
1) Maintenir la table de rappel dans JS (juste un tableau de rappels) et fournir la méthode invokeCallback(callbackId: i32): void au module wasm.
2) Ajoutez une option --tableBase au compilateur, afin que l'utilisateur puisse réserver de l'espace dans la table spécifiquement pour les rappels. Peut fonctionner, mais compliquera probablement les choses du côté du compilateur.

Quoi qu'il en soit, n'hésitez pas à clore ce sujet. La seule chose est que call_indirect et call_direct devraient être supprimés de index.d.ts s'ils ne seront pas rajoutés dans la fonctionnalité

Oui, ceux-ci ont été supprimés en raison de problèmes attendus avec une implémentation de fermeture. Mais on peut encore faire ceci :

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

respectivement

var tableIndex = changetype<usize>(someFunction);

corrigé dans #1017

Cette page vous a été utile?
0 / 5 - 0 notes