Был разрешен в текущей версии LLVM.

ли способ получить доступ к указателям на функции, живущим в модуле WebAssembly?

Например, с учетом следующего «модуля», скомпилированного в WebAssembly:

extern void set_callback(void (*callback)(void *arg), void *arg);

static void callback(void *arg)
{
  /* ... */
}

int main() {
  set_callback(&callback, 0);
  return 0;
}

Может ли реализацияdo_callback в JavaScript вызвать обратный вызов без необходимости экспорта промежуточной функции C для фактического вызова функции?

var instance = new WebAssembly.Instance(module, {
  memory: /* ... */
  env: {
    set_callback: function set_callback(callbackptr, argptr) {
      // We only got the pointer, is there any  
    },
  },
}); 

Под экспортом промежуточной функции я имею в виду, что я мог бы добавить внутреннюю функцию с публичной видимостью.

do_callback(void (*callback)(void *arg), void *arg)
{
  callback();
} 

Тогда JavaScriptset_callback функция может вызывать указатель на функцию через делегатаdo_callback функция.

function set_callback(callbackptr, argptr) {
  instance.exports.do_callback(callbackptr, argptr);
}

Но предпочтительно делать это без необходимости проходить через это явное косвенное обращение, возможно, с таблицами функций?

Ответы на вопрос(1)

Ваш ответ на вопрос