Assemblyscript: 尝试使用 call_indirect 时出现编译错误

创建于 2019-12-19  ·  4评论  ·  资料来源: AssemblyScript/assemblyscript

尽管它在index.d.ts了描述,但它的用法在编译期间会产生错误“ ERROR TS2304: Cannot find name 'call_indirect' ”。 call_direct

最有用的评论

是的,由于闭包实现的预期问题,这些已被删除。 但是仍然可以这样做:

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

分别

var tableIndex = changetype<usize>(someFunction);

所有4条评论

似乎它们在这里被删除了 - https://github.com/AssemblyScript/assemblyscript/pull/974。 是否有/将有任何替代品? 在我的情况下,我需要将从 JS 端提供的回调与 wasm 类相关联。 我的计划是将一个表传递给 wasm 模块(使用--importTable标志),然后使用类似call_indirect( this.callbackId )东西调用它

经过一番考虑,我想出了两种可能的解决方案:
1)在JS中维护回调表(只是一个回调数组)并为wasm模块提供invokeCallback(callbackId: i32): void方法。
2) 向编译器添加一个--tableBase选项,这样用户就可以在表中专门为回调保留一些空间。 可能有效,但可能会使编译器方面的事情复杂化。

无论如何,请随时关闭此问题。 唯一的问题是call_indirectcall_direct应该从index.d.ts删除,如果它们不会被添加回功能中

是的,由于闭包实现的预期问题,这些已被删除。 但是仍然可以这样做:

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

分别

var tableIndex = changetype<usize>(someFunction);

已修复 #1017

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

emil14 picture emil14  ·  3评论

torch2424 picture torch2424  ·  3评论

Iainmon picture Iainmon  ·  3评论

pannous picture pannous  ·  4评论

MaxGraey picture MaxGraey  ·  3评论