如何在WebAssembly中创建和引用表?

时间:2017-11-14 13:13:38

标签: webassembly

有人可以分享语法来静态创建具有某些元素的表并引用它吗?我找不到任何网页汇编代码。

还有一些细节,比如我可以有多个列,如果索引不在表中会发生什么等等会有帮助吗?

1 个答案:

答案 0 :(得分:4)

在文本格式中,声明table及其表类型,即(初始)大小和元素类型 - 当前anyfunc是唯一受支持的类型:

(table $name 100 anyfunc)

通过提供一个或多个element segments

,可以在模块中初始化表
(elem (i32.const 0) $f1 $f2 $f3)

其中表达式表示偏移量,后面跟着模块中定义的函数列表。

使用此类表的唯一方法是通过call_indirect指令:

(call_indirect (type $t) (arg1) ... (argn) (index))

您可以在Wasm规范测试套件中找到一些简单的示例,例如:这里:

https://github.com/WebAssembly/spec/blob/master/test/core/elem.wast

表没有列(尽管将来Wasm可能允许多个表)。对于execution,超出边界访问会导致陷阱,访问未初始化索引或类型不匹配也是如此。