Assemblyscript: Kesalahan kompilasi saat mencoba menggunakan call_indirect

Dibuat pada 19 Des 2019  ·  4Komentar  ·  Sumber: AssemblyScript/assemblyscript

Meskipun itu dijelaskan dalam index.d.ts penggunaannya menghasilkan kesalahan " ERROR TS2304: Cannot find name 'call_indirect' " selama kompilasi. Hal yang sama berlaku untuk call_direct .

Komentar yang paling membantu

Ya, ini telah dihapus karena masalah yang diharapkan dengan implementasi penutupan. Tetapi seseorang masih dapat melakukan ini:

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

masing-masing

var tableIndex = changetype<usize>(someFunction);

Semua 4 komentar

Sepertinya mereka dihapus di sini - https://github.com/AssemblyScript/assemblyscript/pull/974 . Apakah ada/akan ada penggantinya? Dalam kasus saya, saya perlu mengaitkan panggilan balik yang disediakan dari sisi JS dengan kelas wasm. Rencana saya adalah meneruskan tabel ke modul wasm (menggunakan flag --importTable ) dan kemudian menyebutnya menggunakan sesuatu seperti call_indirect( this.callbackId )

Setelah beberapa pertimbangan, saya menemukan 2 kemungkinan solusi:
1) Pertahankan tabel panggilan balik di JS (hanya array panggilan balik) dan berikan metode invokeCallback(callbackId: i32): void ke modul wasm.
2) Tambahkan opsi --tableBase ke kompiler, sehingga pengguna dapat memesan beberapa ruang di tabel khusus untuk panggilan balik. Mungkin berhasil, tetapi mungkin akan memperumit hal-hal di sisi kompiler.

Bagaimanapun, jangan ragu untuk menutup masalah ini. Satu-satunya hal adalah call_indirect dan call_direct harus dihapus dari index.d.ts jika tidak ditambahkan kembali ke fitur

Ya, ini telah dihapus karena masalah yang diharapkan dengan implementasi penutupan. Tetapi seseorang masih dapat melakukan ini:

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

masing-masing

var tableIndex = changetype<usize>(someFunction);

diperbaiki di #1017

Apakah halaman ini membantu?
0 / 5 - 0 peringkat