UNPKG

wasmux

Version:

WebAssembly toolchain for compiling libc and kernel into system-level WASM modules

60 lines (53 loc) 2.32 kB
import { BaseThreadContext } from './BaseThreadContext.mjs'; import { WEB_UserInstanceStart } from "./Object.mjs"; import { WEB_PostMessage2 } from "./Object.mjs"; import { WEB_PostMessage3 } from "./Object.mjs"; import { WEB_PostMessage4 } from "./Object.mjs"; import { WEB_PostMessage5 } from "./Object.mjs"; import { WEB_PostMessage6 } from "./Object.mjs"; import { WEB_WorkerInstance } from "./Object.mjs"; import { WEB_WorkerPerform2 } from "./Object.mjs"; import { WEB_WorkerPerform3 } from "./Object.mjs"; import { WEB_WorkerPerform4 } from "./Object.mjs"; import { WEB_WorkerPerform5 } from "./Object.mjs"; import { sys_NotImplemented } from "./SystemCalls.mjs"; import { sys_UserInstanceStart } from "./SystemCalls.mjs"; import { sys_PostMessage2 } from "./SystemCalls.mjs"; import { sys_PostMessage3 } from "./SystemCalls.mjs"; import { sys_PostMessage4 } from "./SystemCalls.mjs"; import { sys_PostMessage5 } from "./SystemCalls.mjs"; import { sys_PostMessage6 } from "./SystemCalls.mjs"; class WorkerThreadContext extends BaseThreadContext { constructor({kernelModule, kernelMemory}) { if (!(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)) { throw 'Only for Worker'; } super(kernelModule, kernelMemory, self, null); this._objects[WEB_UserInstanceStart] = sys_UserInstanceStart; this._objects[WEB_PostMessage2] = sys_PostMessage2; this._objects[WEB_PostMessage3] = sys_PostMessage3; this._objects[WEB_PostMessage4] = sys_PostMessage4; this._objects[WEB_PostMessage5] = sys_PostMessage5; this._objects[WEB_PostMessage6] = sys_PostMessage6; this._objects[WEB_WorkerInstance] = sys_NotImplemented; this._objects[WEB_WorkerPerform2] = sys_NotImplemented; this._objects[WEB_WorkerPerform3] = sys_NotImplemented; this._objects[WEB_WorkerPerform4] = sys_NotImplemented; this._objects[WEB_WorkerPerform5] = sys_NotImplemented; const kinst = new WebAssembly.Instance(this._kernelModule, this.makeImports()); this._kernel = kinst.exports; } } let system = null; self.addEventListener('message', (event) => { const { data } = event; switch (data.type) { case 'instance': system = new WorkerThreadContext(data); break; case 'perform': system.perform(...data.args); break; } });