没有使用indirect_call在线可用的示例。根据语义文档,我尝试了
(call_indirect
(i32.const 0)
(i32.const 0)
)
Run Code Online (Sandbox Code Playgroud)
数字是随机的,但是没有给出我期望的运行时错误。我正在解析错误。
正确的语法是call_indirect什么?
正确的语法call_indirect似乎是
(call_indirect $fsig
(i32.const 0)
)
Run Code Online (Sandbox Code Playgroud)
其中$fsig是 部分中定义的预期函数签名type,参数是函数的地址(或者更确切地说是其在 中的索引table)。
以调用函数指针的以下 C 代码示例为例:
typedef void(*fp)();
void dispatch(fp x) {
x();
}
Run Code Online (Sandbox Code Playgroud)
它编译为
(module
(type $FUNCSIG$v (func))
(table 0 anyfunc)
(memory $0 1)
(export "memory" (memory $0))
(export "dispatch" (func $dispatch))
(func $dispatch (param $0 i32)
(call_indirect $FUNCSIG$v
(get_local $0)
)
)
)
Run Code Online (Sandbox Code Playgroud)
这是一个更完整的示例,我们实际上调用了一个test返回值的函数:
(module
(type $FUNCSIG$i (func (result i32)))
(table 1 anyfunc)
(elem (i32.const 0) $test)
(memory $0 1)
(func $test (type $FUNCSIG$i) (result i32)
(i32.const 42)
)
(func $main (result i32)
(call_indirect $FUNCSIG$i
(i32.const 0)
)
)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
814 次 |
| 最近记录: |