Is there any way to get access to function pointers living inside a WebAssembly module?
For example, given the following "module" compiled to WebAssembly:
extern void set_callback(void (*callback)(void *arg), void *arg);
static void callback(void *arg)
{
/* ... */
}
int main() {
set_callback(&callback, 0);
return 0;
}
Can an implementation of do_callback in JavaScript invoke the callback without having to rely on an intermediary C function export to do the actual function call?
var instance = new WebAssembly.Instance(module, {
memory: /* ... */
env: {
set_callback: function set_callback(callbackptr, argptr) {
// We only got the pointer, is there any
},
},
});
By intermediary function export, I mean that I could add an internal function with public visibility.
do_callback(void (*callback)(void *arg), void *arg)
{
callback();
}
Then the JavaScript set_callback function can call the function pointer via the delegate do_callback function.
function set_callback(callbackptr, argptr) {
instance.exports.do_callback(callbackptr, argptr);
}
But, it's preferable to do this without having to go through that explicit indirection, is it possible, with function tables maybe?