Obwohl es im index.d.ts
seine Verwendung beim Kompilieren zu einem Fehler " ERROR TS2304: Cannot find name 'call_indirect'
". Das gleiche gilt für call_direct
.
Anscheinend wurden sie hier entfernt - https://github.com/AssemblyScript/assemblyscript/pull/974. Gibt/gibt es Ersatz? In meinem Fall muss ich einen von der JS-Seite bereitgestellten Rückruf einer wasm-Klasse zuordnen. Mein Plan war, eine Tabelle an das wasm-Modul zu übergeben (mit einem --importTable
Flag) und sie dann mit etwas wie call_indirect( this.callbackId )
aufzurufen
Nach einigen Überlegungen habe ich 2 mögliche Lösungen gefunden:
1) Pflegen Sie die Callback-Tabelle in JS (nur ein Array von Callbacks) und stellen Sie dem wasm-Modul die Methode invokeCallback(callbackId: i32): void
zur Verfügung.
2) Fügen Sie dem Compiler eine Option --tableBase
, damit der Benutzer etwas Platz in der Tabelle speziell für Rückrufe reservieren kann. Kann funktionieren, wird aber wahrscheinlich die Dinge auf der Compilerseite komplizieren.
Wie auch immer, Sie können dieses Thema gerne schließen. Die einzige Sache ist, dass call_indirect
und call_direct
aus index.d.ts
wenn sie nicht wieder in der Funktion hinzugefügt werden
Ja, diese wurden wegen erwarteter Probleme mit einer Schließungsimplementierung entfernt. Aber das kann man noch machen:
changetype<(a: i32, b: i32) => i32>(someTableIndex)(1, 2);
bzw
var tableIndex = changetype<usize>(someFunction);
behoben in #1017
Hilfreichster Kommentar
Ja, diese wurden wegen erwarteter Probleme mit einer Schließungsimplementierung entfernt. Aber das kann man noch machen:
bzw