summaryrefslogtreecommitdiffstats
path: root/site/robo.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'site/robo.mjs')
-rw-r--r--site/robo.mjs59
1 files changed, 18 insertions, 41 deletions
diff --git a/site/robo.mjs b/site/robo.mjs
index e6db244..1b7c3d8 100644
--- a/site/robo.mjs
+++ b/site/robo.mjs
@@ -2,59 +2,22 @@ import init, { make_vm } from './wasm/automathon.js';
let vm;
-function vmData(vm) {
- const wordlist = vm.wordlist().map(bc => {
- let res = [];
- for (let i = 0; i < bc.len(); i++) {
- res.push(bc.at(i))
- }
- return res;
- });
- const callstack = vm.callstack().map(e => { return { word: e.word, offset: e.offset }; });
- const vars = Object.fromEntries(['out', 'heading', 'speed', 'doppler'].map(name => [name, vm[name]()]));
- const ip = {word: vm.ip().word, offset: vm.ip().offset};
- const annos = vm.annotations().map(word_annos => {
- let res = [];
- for (let i = 0; i < word_annos.len(); i++) {
- const anno = word_annos.at(i);
- res.push({ start: anno.start, end: anno.end })
- }
- return res;
- });
- return {
- wordlist,
- stack: vm.stack(),
- callstack,
- vars,
- ip,
- annos,
- }
-}
-
function compile(text) {
const start = performance.now();
const res = vm.compile(text);
const end = performance.now();
console.info(`compile took ${end-start} ms`);
- postMessage({ kind: 'compile', res, vm: vmData(vm) });
+ postMessage({ kind: 'compile', res, trans: vm.trans() });
}
function tick() {
if (!vm.tick()) {
vm.reset_ip();
}
- postMessage({ kind: 'tick', vm: vmData(vm) });
+ postMessage({ kind: 'tick', trans: vm.trans() });
}
-let mod;
async function messageHandler(e) {
- if (mod === undefined) {
- console.debug('worker running init');
- mod = await init();
- console.debug('worker init done');
- vm = make_vm();
- console.debug('worker vm made');
- }
const { kind } = e.data;
switch (kind) {
case 'compile':
@@ -69,5 +32,19 @@ async function messageHandler(e) {
}
}
-console.debug('loading robo worker');
-addEventListener('message', messageHandler);
+let mod;
+async function loaded() {
+ console.debug('loading robo worker');
+ if (mod === undefined) {
+ console.debug('worker running init');
+ mod = await init();
+ console.debug('worker init done');
+ vm = make_vm();
+ console.debug('worker vm made');
+ }
+
+ addEventListener('message', messageHandler);
+ console.debug('bjc loaded robo');
+}
+
+loaded();