mirror of
https://github.com/anoma/juvix.git
synced 2024-12-15 10:03:22 +03:00
657de73b98
* import all non-compile axioms with alphanum names in entrypoint This commit adds `__attribute__((input_name(<name>)))` to the type signature of all axioms that do not have a compile block. This indicates to the compiler that this function should be added to the input table of the WASM binary. Adds a test that an imported function can be called from Juvix. * test: Run node command in same directory as WASM output * Don't generate importName for non-alphnum axioms * Add a tutorial on Juvix module to JS interop via Wasm
36 lines
773 B
JavaScript
36 lines
773 B
JavaScript
const fs = require('fs');
|
|
|
|
let wasmModule = null;
|
|
|
|
function cstrlen(mem, ptr) {
|
|
let len = 0;
|
|
while (mem[ptr] != 0) {
|
|
len++;
|
|
ptr++;
|
|
}
|
|
return len;
|
|
}
|
|
|
|
function ptrToCstr(ptr) {
|
|
const wasmMemory = wasmModule.instance.exports.memory.buffer;
|
|
const mem = new Uint8Array(wasmMemory);
|
|
const len = cstrlen(mem, ptr);
|
|
const bytes = new Uint8Array(wasmMemory, ptr, len);
|
|
return new TextDecoder().decode(bytes);
|
|
}
|
|
|
|
function hostDisplayString(strPtr) {
|
|
const text = ptrToCstr(strPtr);
|
|
console.log(text);
|
|
}
|
|
|
|
const wasmBuffer = fs.readFileSync("Input.wasm");
|
|
WebAssembly.instantiate(wasmBuffer, {
|
|
env: {
|
|
hostDisplayString,
|
|
}
|
|
}).then((w) => {
|
|
wasmModule = w;
|
|
wasmModule.instance.exports.juvixRender();
|
|
});
|