WASM - Passing JS objects to D

JN 666total at wp.pl
Tue Jul 25 13:49:57 UTC 2023


What is the recommended way to pass JS objects to D when doing 
WASM?

My current solution is to maintain an ID <-> object mapping in 
JS, something like:

const mapJsToHandle = new WeakMap();
const mapHandleToJs = {};
var id = 0;

const toHandle = (x) => {
     if (!mapJsToHandle.has(x))
     {
         id++;
         mapJsToHandle.set(x, id);
         mapHandleToJs[id] = new WeakRef(x);
         return id;
     } else {
         return mapJsToHandle.get(x);
     }
};

const fromHandle = (x) => {
     return mapHandleToJs[x].deref();
};

which I can use like:

const drawJS = (imghandle, x, y) => {
     document.ctx.drawImage(fromHandle(imghandle), x, y);
}

var img = new Image();
drawImage(toHandle(img))

============
D code
============
extern(C) void drawImage(int imghandle)
{
     draw(imghandle, 100, 100);
}

void drawJS(int imghandle, double x, double y);



This works. But I wonder if there's some easier/better way? If I 
understand correctly you can only pass primitive objects and 
arrays across the boundaries.



More information about the Digitalmars-d-learn mailing list