-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
42 lines (35 loc) · 1.23 KB
/
Copy pathscript.js
File metadata and controls
42 lines (35 loc) · 1.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import init, { compile } from "./wasm_basic.js";
document.addEventListener("DOMContentLoaded", async () => {
await init();
document.getElementById("run").addEventListener("click", async () => {
const source = document.getElementById("editor").value;
const output = document.getElementById("output");
const status = document.getElementById("status");
status.textContent = "Compiling...";
try {
const wasmBytes = compile(source);
const results = [];
await WebAssembly.instantiate(wasmBytes, {
env: {
print: (x) => results.push(x),
},
});
output.innerHTML = results.length
? results
.map(
(v) =>
`<div class="output-line"><span class="arrow">→</span><span class="value">${v}</span></div>`,
)
.join("")
: '<div class="output-empty">Program ran with no output.</div>';
status.textContent = "Done";
} catch (e) {
const message = (e?.message ?? String(e))
.replaceAll("&", "&")
.replaceAll("<", "<")
.replaceAll(">", ">");
output.innerHTML = `<div class="output-error">${message}</div>`;
status.textContent = "Error";
}
});
});