wasm: add glue JS code

The file wasm_glue.js was copied from the Go wasm port and was modified,
most importantly to match the TinyGo calling convention.
This commit is contained in:
Ayke van Laethem
2018-10-23 21:34:54 +02:00
parent 242a1843d1
commit dbb3211485
4 changed files with 449 additions and 37 deletions
+4 -36
View File
@@ -3,51 +3,19 @@
const WASM_URL = '../../../wasm.wasm';
var wasm;
var logLine = [];
var memory8;
var importObject = {
env: {
io_get_stdout: function() {
return 1;
},
resource_write: function(fd, ptr, len) {
if (fd == 1) {
for (let i=0; i<len; i++) {
let c = memory8[ptr+i];
if (c == 13) { // CR
// ignore
} else if (c == 10) { // LF
// write line
let line = new TextDecoder("utf-8").decode(new Uint8Array(logLine));
logLine = [];
console.log(line);
} else {
logLine.push(c);
}
}
} else {
console.error('invalid file descriptor:', fd);
}
},
},
};
function updateResult() {
let a = parseInt(document.querySelector('#a').value);
let b = parseInt(document.querySelector('#b').value);
let result = wasm.exports.add(a, b);
document.querySelector('#result').value = result;
wasm.exports.update();
}
function init() {
document.querySelector('#a').oninput = updateResult;
document.querySelector('#b').oninput = updateResult;
WebAssembly.instantiateStreaming(fetch(WASM_URL), importObject).then(function(obj) {
const go = new Go();
WebAssembly.instantiateStreaming(fetch(WASM_URL), go.importObject).then(function(obj) {
wasm = obj.instance;
memory8 = new Uint8Array(wasm.exports.memory.buffer);
wasm.exports.cwa_main();
go.run(wasm);
updateResult();
})
}