Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
181 changes: 125 additions & 56 deletions src/packages/web-worker/wasmAsInit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,27 +40,50 @@ export async function instantiate(module, imports = {}) {
(values[(values.SPI = exports["InputKind.SPI"].valueOf())] = "SPI"),
values
))({}),
disassemble(input, kind) {
// assembly/index/disassemble(~lib/array/Array<u8>, i32) => ~lib/string/String
input = __lowerArray(__setU8, 4, 0, input) || __notnull();
return __liftString(exports.disassemble(input, kind) >>> 0);
HasMetadata: ((values) =>
(
// assembly/index/HasMetadata
(values[(values.Yes = exports["HasMetadata.Yes"].valueOf())] = "Yes"),
(values[(values.No = exports["HasMetadata.No"].valueOf())] = "No"),
values
))({}),
disassemble(input, kind, withMetadata) {
// assembly/index/disassemble(~lib/array/Array<u8>, i32, i32) => ~lib/string/String
input = __lowerArray(__setU8, 27, 0, input) || __notnull();
return __liftString(exports.disassemble(input, kind, withMetadata) >>> 0);
},
runProgram(input, kind) {
// assembly/index/runProgram(~lib/array/Array<u8>, i32) => void
input = __lowerArray(__setU8, 4, 0, input) || __notnull();
exports.runProgram(input, kind);
runProgram(input, registers, kind) {
// assembly/index/runProgram(~lib/array/Array<u8>, ~lib/array/Array<u64>, i32) => assembly/api-generic/VmOutput
input = __retain(__lowerArray(__setU8, 27, 0, input) || __notnull());
registers = __lowerArray(__setU64, 43, 3, registers) || __notnull();
try {
return __liftRecord44(exports.runProgram(input, registers, kind) >>> 0);
} finally {
__release(input);
}
},
runVm(input, logs) {
// assembly/api-generic/runVm(assembly/api-generic/VmInput, bool?) => assembly/api-generic/VmOutput
input = __lowerRecord39(input) || __notnull();
runVm(input, logs, useSbrkGas) {
// assembly/api-generic/runVm(assembly/api-generic/VmInput, bool?, bool?) => assembly/api-generic/VmOutput
input = __lowerRecord47(input) || __notnull();
logs = logs ? 1 : 0;
useSbrkGas = useSbrkGas ? 1 : 0;
exports.__setArgumentsLength(arguments.length);
return __liftRecord44(exports.runVm(input, logs) >>> 0);
return __liftRecord44(exports.runVm(input, logs, useSbrkGas) >>> 0);
},
getAssembly(p) {
// assembly/api-generic/getAssembly(assembly/program/Program) => ~lib/string/String
p = __lowerInternref(p) || __notnull();
return __liftString(exports.getAssembly(p) >>> 0);
},
wrapAsProgram(bytecode) {
// assembly/program-build/wrapAsProgram(~lib/typedarray/Uint8Array) => ~lib/typedarray/Uint8Array
bytecode = __lowerTypedArray(Uint8Array, 5, 0, bytecode) || __notnull();
return __liftTypedArray(Uint8Array, exports.wrapAsProgram(bytecode) >>> 0);
},
resetGeneric(program, flatRegisters, initialGas) {
// assembly/api/resetGeneric(~lib/array/Array<u8>, ~lib/array/Array<u8>, u64) => void
program = __retain(__lowerArray(__setU8, 4, 0, program) || __notnull());
flatRegisters = __lowerArray(__setU8, 4, 0, flatRegisters) || __notnull();
// assembly/api/resetGeneric(~lib/array/Array<u8>, ~lib/array/Array<u8>, i64) => void
program = __retain(__lowerArray(__setU8, 27, 0, program) || __notnull());
flatRegisters = __lowerArray(__setU8, 27, 0, flatRegisters) || __notnull();
initialGas = initialGas || 0n;
try {
exports.resetGeneric(program, flatRegisters, initialGas);
Expand All @@ -69,9 +92,9 @@ export async function instantiate(module, imports = {}) {
}
},
resetGenericWithMemory(program, flatRegisters, pageMap, chunks, initialGas) {
// assembly/api/resetGenericWithMemory(~lib/array/Array<u8>, ~lib/array/Array<u8>, ~lib/typedarray/Uint8Array, ~lib/typedarray/Uint8Array, u64) => void
program = __retain(__lowerArray(__setU8, 4, 0, program) || __notnull());
flatRegisters = __retain(__lowerArray(__setU8, 4, 0, flatRegisters) || __notnull());
// assembly/api/resetGenericWithMemory(~lib/array/Array<u8>, ~lib/array/Array<u8>, ~lib/typedarray/Uint8Array, ~lib/typedarray/Uint8Array, i64) => void
program = __retain(__lowerArray(__setU8, 27, 0, program) || __notnull());
flatRegisters = __retain(__lowerArray(__setU8, 27, 0, flatRegisters) || __notnull());
pageMap = __retain(__lowerTypedArray(Uint8Array, 5, 0, pageMap) || __notnull());
chunks = __lowerTypedArray(Uint8Array, 5, 0, chunks) || __notnull();
initialGas = initialGas || 0n;
Expand All @@ -87,9 +110,9 @@ export async function instantiate(module, imports = {}) {
// assembly/api/nextStep() => bool
return exports.nextStep() != 0;
},
run(steps) {
// assembly/api/run(u32) => bool
return exports.run(steps) != 0;
nSteps(steps) {
// assembly/api/nSteps(u32) => bool
return exports.nSteps(steps) != 0;
},
getProgramCounter() {
// assembly/api/getProgramCounter() => u32
Expand All @@ -110,7 +133,7 @@ export async function instantiate(module, imports = {}) {
},
setRegisters(flatRegisters) {
// assembly/api/setRegisters(~lib/array/Array<u8>) => void
flatRegisters = __lowerArray(__setU8, 4, 0, flatRegisters) || __notnull();
flatRegisters = __lowerArray(__setU8, 27, 0, flatRegisters) || __notnull();
exports.setRegisters(flatRegisters);
},
getPageDump(index) {
Expand All @@ -125,43 +148,65 @@ export async function instantiate(module, imports = {}) {
},
exports,
);
function __lowerRecord40(value) {
function __liftRecord45(pointer) {
// assembly/api-generic/InitialChunk
// Hint: Opt-out from lifting as a record by providing an empty constructor
if (!pointer) return null;
return {
address: __getU32(pointer + 0),
data: __liftArray(__getU8, 0, __getU32(pointer + 4)),
};
}
function __liftRecord44(pointer) {
// assembly/api-generic/VmOutput
// Hint: Opt-out from lifting as a record by providing an empty constructor
if (!pointer) return null;
return {
status: __getI32(pointer + 0),
registers: __liftArray((pointer) => BigInt.asUintN(64, __getU64(pointer)), 3, __getU32(pointer + 4)),
pc: __getU32(pointer + 8),
memory: __liftArray((pointer) => __liftRecord45(__getU32(pointer)), 2, __getU32(pointer + 12)),
gas: __getI64(pointer + 16),
exitCode: __getU32(pointer + 24),
};
}
function __lowerRecord48(value) {
// assembly/api-generic/InitialPage
// Hint: Opt-out from lowering as a record by providing an empty constructor
if (value == null) return 0;
const pointer = exports.__pin(exports.__new(12, 40));
const pointer = exports.__pin(exports.__new(12, 48));
__setU32(pointer + 0, value.address);
__setU32(pointer + 4, value.length);
__setU32(pointer + 8, value.access);
exports.__unpin(pointer);
return pointer;
}
function __lowerRecord42(value) {
function __lowerRecord45(value) {
// assembly/api-generic/InitialChunk
// Hint: Opt-out from lowering as a record by providing an empty constructor
if (value == null) return 0;
const pointer = exports.__pin(exports.__new(8, 42));
const pointer = exports.__pin(exports.__new(8, 45));
__setU32(pointer + 0, value.address);
__setU32(pointer + 4, __lowerArray(__setU8, 4, 0, value.data) || __notnull());
__setU32(pointer + 4, __lowerArray(__setU8, 27, 0, value.data) || __notnull());
exports.__unpin(pointer);
return pointer;
}
function __lowerRecord39(value) {
function __lowerRecord47(value) {
// assembly/api-generic/VmInput
// Hint: Opt-out from lowering as a record by providing an empty constructor
if (value == null) return 0;
const pointer = exports.__pin(exports.__new(28, 39));
__setU32(pointer + 0, __lowerArray(__setU32, 38, 2, value.registers) || __notnull());
const pointer = exports.__pin(exports.__new(28, 47));
__setU32(pointer + 0, __lowerArray(__setU64, 43, 3, value.registers) || __notnull());
__setU32(pointer + 4, value.pc);
__setU64(pointer + 8, value.gas || 0n);
__setU32(pointer + 16, __lowerArray(__setU8, 4, 0, value.program) || __notnull());
__setU32(pointer + 16, __lowerArray(__setU8, 27, 0, value.program) || __notnull());
__setU32(
pointer + 20,
__lowerArray(
(pointer, value) => {
__setU32(pointer, __lowerRecord40(value) || __notnull());
__setU32(pointer, __lowerRecord48(value) || __notnull());
},
41,
49,
2,
value.pageMap,
) || __notnull(),
Expand All @@ -170,37 +215,16 @@ export async function instantiate(module, imports = {}) {
pointer + 24,
__lowerArray(
(pointer, value) => {
__setU32(pointer, __lowerRecord42(value) || __notnull());
__setU32(pointer, __lowerRecord45(value) || __notnull());
},
43,
46,
2,
value.memory,
) || __notnull(),
);
exports.__unpin(pointer);
return pointer;
}
function __liftRecord42(pointer) {
// assembly/api-generic/InitialChunk
// Hint: Opt-out from lifting as a record by providing an empty constructor
if (!pointer) return null;
return {
address: __getU32(pointer + 0),
data: __liftArray(__getU8, 0, __getU32(pointer + 4)),
};
}
function __liftRecord44(pointer) {
// assembly/api-generic/VmOutput
// Hint: Opt-out from lifting as a record by providing an empty constructor
if (!pointer) return null;
return {
status: __getI32(pointer + 0),
registers: __liftArray((pointer) => __getU32(pointer) >>> 0, 2, __getU32(pointer + 4)),
pc: __getU32(pointer + 8),
memory: __liftArray((pointer) => __liftRecord42(__getU32(pointer)), 2, __getU32(pointer + 12)),
gas: __getI64(pointer + 16),
};
}
function __liftString(pointer) {
if (!pointer) return null;
const end = (pointer + new Uint32Array(memory.buffer)[(pointer - 4) >>> 2]) >>> 1,
Expand Down Expand Up @@ -252,6 +276,12 @@ export async function instantiate(module, imports = {}) {
exports.__unpin(buffer);
return header;
}
class Internref extends Number {}
function __lowerInternref(value) {
if (value == null) return 0;
if (value instanceof Internref) return value.valueOf();
throw TypeError("internref expected");
}
const refcounts = new Map();
function __retain(pointer) {
if (pointer) {
Expand Down Expand Up @@ -329,5 +359,44 @@ export async function instantiate(module, imports = {}) {
return __dataview.getBigInt64(pointer, true);
}
}
function __getU64(pointer) {
try {
return __dataview.getBigUint64(pointer, true);
} catch {
__dataview = new DataView(memory.buffer);
return __dataview.getBigUint64(pointer, true);
}
}
return adaptedExports;
}
// export const {
// memory,
// InputKind,
// HasMetadata,
// disassemble,
// runProgram,
// runVm,
// getAssembly,
// wrapAsProgram,
// resetGeneric,
// resetGenericWithMemory,
// nextStep,
// nSteps,
// getProgramCounter,
// setNextProgramCounter,
// getStatus,
// getExitArg,
// getGasLeft,
// setGasLeft,
// getRegisters,
// setRegisters,
// getPageDump,
// setMemory,
// } = await (async url => instantiate(
// await (async () => {
// const isNodeOrBun = typeof process != "undefined" && process.versions != null && (process.versions.node != null || process.versions.bun != null);
// if (isNodeOrBun) { return globalThis.WebAssembly.compile(await (await import("node:fs/promises")).readFile(url)); }
// else { return await globalThis.WebAssembly.compileStreaming(globalThis.fetch(url)); }
// })(), {
// }
// ))(new URL("release.wasm", import.meta.url));
4 changes: 3 additions & 1 deletion src/packages/web-worker/wasmAsShell.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@ export async function createAssemblyScriptWasmPvmShell(module: WebAssembly.Modul
const {
// memory,
// InputKind,
// HasMetadata,
// disassemble,
// runProgram,
// runVm,
// getAssembly,
// wrapAsProgram,
resetGeneric,

resetGenericWithMemory,
nextStep,
nSteps,
Expand Down
12 changes: 5 additions & 7 deletions src/packages/web-worker/worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,13 @@ export function postTypedMessage(msg: WorkerResponseParams) {
postMessage(msg);
}

onmessage = async (ev: MessageEvent<WorkerRequestParams>) => {
try {
await rawOnMessage(ev);
} catch (e) {
onmessage = (ev: MessageEvent<WorkerRequestParams>) => {
rawOnMessage(ev).catch((e) => {
console.error(e);
}
});
};

const rawOnMessage = async (e: MessageEvent<WorkerRequestParams>) => {
async function rawOnMessage(e: MessageEvent<WorkerRequestParams>) {
if (!e.data?.command) {
return;
}
Expand Down Expand Up @@ -150,4 +148,4 @@ const rawOnMessage = async (e: MessageEvent<WorkerRequestParams>) => {
messageId: e.data.messageId,
});
}
};
}
3 changes: 0 additions & 3 deletions vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@ export default defineConfig({
"@": path.resolve(__dirname, "./src"),
},
},
server: {
allowedHosts: ["decd-85-221-148-245.ngrok-free.app"],
},
define: {
"import.meta.env.TYPEBERRY_PVM_VERSION": JSON.stringify(
packageJson.dependencies["@typeberry/pvm-debugger-adapter"],
Expand Down
Loading