-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
47 lines (39 loc) · 1.14 KB
/
script.js
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
43
44
45
46
47
//WASM
let wasmMemory = new WebAssembly.Memory({ initial: 256, maximum: 256 });
let wasmTable = new WebAssembly.Table({
initial: 1,
maximum: 1,
element: 'anyfunc'
});
let asmLibraryArg = {
__handle_over_flow: () => {},
emscripten_resize_heap: () => {},
__lock: () => {},
__unlock: () => {},
memory: wasmMemory,
table: wasmTable
};
let info = {
env: asmLibraryArg,
wasi_snapshot_preview1: asmLibraryArg
};
async function instantiate() {
let response = await fetch('grade.wasm');
let bytes = await response.arrayBuffer();
let wasmObj = await WebAssembly.instantiate(bytes, info);
return new Promise(res => res(wasmObj.instance.exports));
}
function compileString(str, object){
let memoryBuffer = new Uint8Array(object.memory.buffer);
let resultStr = "";
for (let i = str; memoryBuffer[i] !== 0; ++i) {
resultStr += String.fromCharCode(memoryBuffer[i]);
}
return resultStr;
}
function Evaluate() {
instantiate().then(object => {
const grade = document.getElementById('textfield').value - 0;
alert(compileString(object.evaluate(grade),object));
});
}