Thread overview
How do I make this function from module public?
Oct 14
Jack
Oct 14
Jack
Oct 14
Jack
October 14
I'm playing with wasm, I wrote a small module where I'd like to make the function available but wasm can't find this function.

math.d

>module math;
>extern(C):
>int mul(int a, int b) { return a *  b;}

wasm.d


>public import math;
>extern(C): // disable D mangling
>void doSomething() { ... } // seems to be the required entry point
>void _start() {}

start.html:

<html>
  <head>
    <script>
    (async() => {
        const response = await fetch('wasm.wasm');
        const bytes = await response.arrayBuffer();
        const { instance } = await WebAssembly.instantiate(bytes);
        const res =  instance.exports.mul(2, 4);
        console.log('The answer is: ' + res);
        document.getElementById("result").innerHTML = "The result is: " + res;
      })();
    </script>
  </head>
  <body>
    Test page
    <h1 id="result"></h1>
  </body>
</html>

the exported function fails to find 'mul' function, as I can see from the browser's console:

>start.html:8 Uncaught (in promise) TypeError: instance.exports.mul is not a >function at start.html:8

can I make it public using D or do I have to import the wanted module with javascript?
October 14
I'm compiling with

> ldc2 -mtriple=wasm32-unknow-unknow-wasm -betterC wasm.d
October 14
On Wednesday, 14 October 2020 at 01:46:11 UTC, Jack wrote:
>>extern(C):
>>int mul(int a, int b) { return a *  b;}

mark it `export` as well

and then be sure you are compiling in this module as well, it must be included on the ldc command line along with wasm.d
October 14
On Wednesday, 14 October 2020 at 01:55:13 UTC, Adam D. Ruppe wrote:
> On Wednesday, 14 October 2020 at 01:46:11 UTC, Jack wrote:
>>>extern(C):
>>>int mul(int a, int b) { return a *  b;}
>
> mark it `export` as well
>
> and then be sure you are compiling in this module as well, it must be included on the ldc command line along with wasm.d

worked, thanks!