Files
deno_tests/deno_test_wasm/test.ts
2020-05-30 22:03:18 +08:00

31 lines
1.1 KiB
TypeScript

const wasmCode = await Deno.readFile("./test_wasm/target/wasm32-unknown-unknown/debug/test_wasm.wasm");
const wasmModule = new WebAssembly.Module(wasmCode);
const wasmInstance = new WebAssembly.Instance(wasmModule);
const linearMemory = wasmInstance.exports.memory;
function writeString() {
let s = "hello world !";
let encoded = new TextEncoder().encode(s);
let ptr = wasmInstance.exports.malloc(encoded.length);
const mem = new Uint8Array(linearMemory.buffer, ptr);
for (let i = 0; i < encoded.length; i++) {
mem[i] = encoded[i];
}
return ptr;
}
// from https://tilman.xyz/blog/2019/12/building-webassembly-for-deno/
function readString(memory, ptr) {
const mem = new Uint8Array(memory.buffer, ptr);
let length;
for (length = 0; mem[length] !== 0; length ++);
return new TextDecoder("utf-8").decode(new Uint8Array(mem.buffer, ptr, length));
}
let ptr = writeString();
console.log("DECODED:\n" + readString(linearMemory, ptr) + " @" + ptr);
let ptr2 = wasmInstance.exports.to_uppercase(ptr);
console.log("DECODED:\n" + readString(linearMemory, ptr2) + " @" + ptr2);