Assemblyscript: Kompilierungsfehler beim Versuch, call_indirect zu verwenden

Erstellt am 19. Dez. 2019  ·  4Kommentare  ·  Quelle: AssemblyScript/assemblyscript

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 .

Hilfreichster Kommentar

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);

Alle 4 Kommentare

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

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen