all: add WebAssembly backend

This commit is contained in:
Ayke van Laethem
2018-10-18 15:15:29 +02:00
parent a51e04c550
commit e5e09747f0
15 changed files with 199 additions and 17 deletions
+9
View File
@@ -0,0 +1,9 @@
package main
func main() {
}
//go:export add
func add(a, b int) int {
return a + b
}
+15
View File
@@ -0,0 +1,15 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Go WebAssembly</title>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<script src="wasm.js" async></script>
</head>
<body>
<h1>WebAssembly</h1>
<p>Add two numbers, using WebAssembly:</p>
<input type="number" id="a" value="2"/> + <input type="number" id="b" value="2"/> = <input type="number" id="result" readonly/>
</body>
</html>
+55
View File
@@ -0,0 +1,55 @@
'use strict';
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;
}
function init() {
document.querySelector('#a').oninput = updateResult;
document.querySelector('#b').oninput = updateResult;
WebAssembly.instantiateStreaming(fetch(WASM_URL), importObject).then(function(obj) {
wasm = obj.instance;
memory8 = new Uint8Array(wasm.exports.memory.buffer);
wasm.exports.cwa_main();
updateResult();
})
}
init();