Skip to content

Commit 9b261e7

Browse files
committed
Update ananas API.
1 parent 39e0d22 commit 9b261e7

File tree

4 files changed

+133
-67
lines changed

4 files changed

+133
-67
lines changed

src/packages/web-worker/wasmAsInit.ts

Lines changed: 125 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -40,27 +40,50 @@ export async function instantiate(module, imports = {}) {
4040
(values[(values.SPI = exports["InputKind.SPI"].valueOf())] = "SPI"),
4141
values
4242
))({}),
43-
disassemble(input, kind) {
44-
// assembly/index/disassemble(~lib/array/Array<u8>, i32) => ~lib/string/String
45-
input = __lowerArray(__setU8, 4, 0, input) || __notnull();
46-
return __liftString(exports.disassemble(input, kind) >>> 0);
43+
HasMetadata: ((values) =>
44+
(
45+
// assembly/index/HasMetadata
46+
(values[(values.Yes = exports["HasMetadata.Yes"].valueOf())] = "Yes"),
47+
(values[(values.No = exports["HasMetadata.No"].valueOf())] = "No"),
48+
values
49+
))({}),
50+
disassemble(input, kind, withMetadata) {
51+
// assembly/index/disassemble(~lib/array/Array<u8>, i32, i32) => ~lib/string/String
52+
input = __lowerArray(__setU8, 27, 0, input) || __notnull();
53+
return __liftString(exports.disassemble(input, kind, withMetadata) >>> 0);
4754
},
48-
runProgram(input, kind) {
49-
// assembly/index/runProgram(~lib/array/Array<u8>, i32) => void
50-
input = __lowerArray(__setU8, 4, 0, input) || __notnull();
51-
exports.runProgram(input, kind);
55+
runProgram(input, registers, kind) {
56+
// assembly/index/runProgram(~lib/array/Array<u8>, ~lib/array/Array<u64>, i32) => assembly/api-generic/VmOutput
57+
input = __retain(__lowerArray(__setU8, 27, 0, input) || __notnull());
58+
registers = __lowerArray(__setU64, 43, 3, registers) || __notnull();
59+
try {
60+
return __liftRecord44(exports.runProgram(input, registers, kind) >>> 0);
61+
} finally {
62+
__release(input);
63+
}
5264
},
53-
runVm(input, logs) {
54-
// assembly/api-generic/runVm(assembly/api-generic/VmInput, bool?) => assembly/api-generic/VmOutput
55-
input = __lowerRecord39(input) || __notnull();
65+
runVm(input, logs, useSbrkGas) {
66+
// assembly/api-generic/runVm(assembly/api-generic/VmInput, bool?, bool?) => assembly/api-generic/VmOutput
67+
input = __lowerRecord47(input) || __notnull();
5668
logs = logs ? 1 : 0;
69+
useSbrkGas = useSbrkGas ? 1 : 0;
5770
exports.__setArgumentsLength(arguments.length);
58-
return __liftRecord44(exports.runVm(input, logs) >>> 0);
71+
return __liftRecord44(exports.runVm(input, logs, useSbrkGas) >>> 0);
72+
},
73+
getAssembly(p) {
74+
// assembly/api-generic/getAssembly(assembly/program/Program) => ~lib/string/String
75+
p = __lowerInternref(p) || __notnull();
76+
return __liftString(exports.getAssembly(p) >>> 0);
77+
},
78+
wrapAsProgram(bytecode) {
79+
// assembly/program-build/wrapAsProgram(~lib/typedarray/Uint8Array) => ~lib/typedarray/Uint8Array
80+
bytecode = __lowerTypedArray(Uint8Array, 5, 0, bytecode) || __notnull();
81+
return __liftTypedArray(Uint8Array, exports.wrapAsProgram(bytecode) >>> 0);
5982
},
6083
resetGeneric(program, flatRegisters, initialGas) {
61-
// assembly/api/resetGeneric(~lib/array/Array<u8>, ~lib/array/Array<u8>, u64) => void
62-
program = __retain(__lowerArray(__setU8, 4, 0, program) || __notnull());
63-
flatRegisters = __lowerArray(__setU8, 4, 0, flatRegisters) || __notnull();
84+
// assembly/api/resetGeneric(~lib/array/Array<u8>, ~lib/array/Array<u8>, i64) => void
85+
program = __retain(__lowerArray(__setU8, 27, 0, program) || __notnull());
86+
flatRegisters = __lowerArray(__setU8, 27, 0, flatRegisters) || __notnull();
6487
initialGas = initialGas || 0n;
6588
try {
6689
exports.resetGeneric(program, flatRegisters, initialGas);
@@ -69,9 +92,9 @@ export async function instantiate(module, imports = {}) {
6992
}
7093
},
7194
resetGenericWithMemory(program, flatRegisters, pageMap, chunks, initialGas) {
72-
// assembly/api/resetGenericWithMemory(~lib/array/Array<u8>, ~lib/array/Array<u8>, ~lib/typedarray/Uint8Array, ~lib/typedarray/Uint8Array, u64) => void
73-
program = __retain(__lowerArray(__setU8, 4, 0, program) || __notnull());
74-
flatRegisters = __retain(__lowerArray(__setU8, 4, 0, flatRegisters) || __notnull());
95+
// assembly/api/resetGenericWithMemory(~lib/array/Array<u8>, ~lib/array/Array<u8>, ~lib/typedarray/Uint8Array, ~lib/typedarray/Uint8Array, i64) => void
96+
program = __retain(__lowerArray(__setU8, 27, 0, program) || __notnull());
97+
flatRegisters = __retain(__lowerArray(__setU8, 27, 0, flatRegisters) || __notnull());
7598
pageMap = __retain(__lowerTypedArray(Uint8Array, 5, 0, pageMap) || __notnull());
7699
chunks = __lowerTypedArray(Uint8Array, 5, 0, chunks) || __notnull();
77100
initialGas = initialGas || 0n;
@@ -87,9 +110,9 @@ export async function instantiate(module, imports = {}) {
87110
// assembly/api/nextStep() => bool
88111
return exports.nextStep() != 0;
89112
},
90-
run(steps) {
91-
// assembly/api/run(u32) => bool
92-
return exports.run(steps) != 0;
113+
nSteps(steps) {
114+
// assembly/api/nSteps(u32) => bool
115+
return exports.nSteps(steps) != 0;
93116
},
94117
getProgramCounter() {
95118
// assembly/api/getProgramCounter() => u32
@@ -110,7 +133,7 @@ export async function instantiate(module, imports = {}) {
110133
},
111134
setRegisters(flatRegisters) {
112135
// assembly/api/setRegisters(~lib/array/Array<u8>) => void
113-
flatRegisters = __lowerArray(__setU8, 4, 0, flatRegisters) || __notnull();
136+
flatRegisters = __lowerArray(__setU8, 27, 0, flatRegisters) || __notnull();
114137
exports.setRegisters(flatRegisters);
115138
},
116139
getPageDump(index) {
@@ -125,43 +148,65 @@ export async function instantiate(module, imports = {}) {
125148
},
126149
exports,
127150
);
128-
function __lowerRecord40(value) {
151+
function __liftRecord45(pointer) {
152+
// assembly/api-generic/InitialChunk
153+
// Hint: Opt-out from lifting as a record by providing an empty constructor
154+
if (!pointer) return null;
155+
return {
156+
address: __getU32(pointer + 0),
157+
data: __liftArray(__getU8, 0, __getU32(pointer + 4)),
158+
};
159+
}
160+
function __liftRecord44(pointer) {
161+
// assembly/api-generic/VmOutput
162+
// Hint: Opt-out from lifting as a record by providing an empty constructor
163+
if (!pointer) return null;
164+
return {
165+
status: __getI32(pointer + 0),
166+
registers: __liftArray((pointer) => BigInt.asUintN(64, __getU64(pointer)), 3, __getU32(pointer + 4)),
167+
pc: __getU32(pointer + 8),
168+
memory: __liftArray((pointer) => __liftRecord45(__getU32(pointer)), 2, __getU32(pointer + 12)),
169+
gas: __getI64(pointer + 16),
170+
exitCode: __getU32(pointer + 24),
171+
};
172+
}
173+
function __lowerRecord48(value) {
129174
// assembly/api-generic/InitialPage
130175
// Hint: Opt-out from lowering as a record by providing an empty constructor
131176
if (value == null) return 0;
132-
const pointer = exports.__pin(exports.__new(12, 40));
177+
const pointer = exports.__pin(exports.__new(12, 48));
133178
__setU32(pointer + 0, value.address);
134179
__setU32(pointer + 4, value.length);
135180
__setU32(pointer + 8, value.access);
136181
exports.__unpin(pointer);
137182
return pointer;
138183
}
139-
function __lowerRecord42(value) {
184+
function __lowerRecord45(value) {
140185
// assembly/api-generic/InitialChunk
141186
// Hint: Opt-out from lowering as a record by providing an empty constructor
142187
if (value == null) return 0;
143-
const pointer = exports.__pin(exports.__new(8, 42));
188+
const pointer = exports.__pin(exports.__new(8, 45));
144189
__setU32(pointer + 0, value.address);
145-
__setU32(pointer + 4, __lowerArray(__setU8, 4, 0, value.data) || __notnull());
190+
__setU32(pointer + 4, __lowerArray(__setU8, 27, 0, value.data) || __notnull());
146191
exports.__unpin(pointer);
147192
return pointer;
148193
}
149-
function __lowerRecord39(value) {
194+
function __lowerRecord47(value) {
150195
// assembly/api-generic/VmInput
151196
// Hint: Opt-out from lowering as a record by providing an empty constructor
152197
if (value == null) return 0;
153-
const pointer = exports.__pin(exports.__new(28, 39));
154-
__setU32(pointer + 0, __lowerArray(__setU32, 38, 2, value.registers) || __notnull());
198+
const pointer = exports.__pin(exports.__new(28, 47));
199+
__setU32(pointer + 0, __lowerArray(__setU64, 43, 3, value.registers) || __notnull());
155200
__setU32(pointer + 4, value.pc);
156201
__setU64(pointer + 8, value.gas || 0n);
157-
__setU32(pointer + 16, __lowerArray(__setU8, 4, 0, value.program) || __notnull());
202+
__setU32(pointer + 16, __lowerArray(__setU8, 27, 0, value.program) || __notnull());
158203
__setU32(
159204
pointer + 20,
160205
__lowerArray(
161206
(pointer, value) => {
162-
__setU32(pointer, __lowerRecord40(value) || __notnull());
207+
__setU32(pointer, __lowerRecord48(value) || __notnull());
163208
},
164-
41,
209+
49,
165210
2,
166211
value.pageMap,
167212
) || __notnull(),
@@ -170,37 +215,16 @@ export async function instantiate(module, imports = {}) {
170215
pointer + 24,
171216
__lowerArray(
172217
(pointer, value) => {
173-
__setU32(pointer, __lowerRecord42(value) || __notnull());
218+
__setU32(pointer, __lowerRecord45(value) || __notnull());
174219
},
175-
43,
220+
46,
176221
2,
177222
value.memory,
178223
) || __notnull(),
179224
);
180225
exports.__unpin(pointer);
181226
return pointer;
182227
}
183-
function __liftRecord42(pointer) {
184-
// assembly/api-generic/InitialChunk
185-
// Hint: Opt-out from lifting as a record by providing an empty constructor
186-
if (!pointer) return null;
187-
return {
188-
address: __getU32(pointer + 0),
189-
data: __liftArray(__getU8, 0, __getU32(pointer + 4)),
190-
};
191-
}
192-
function __liftRecord44(pointer) {
193-
// assembly/api-generic/VmOutput
194-
// Hint: Opt-out from lifting as a record by providing an empty constructor
195-
if (!pointer) return null;
196-
return {
197-
status: __getI32(pointer + 0),
198-
registers: __liftArray((pointer) => __getU32(pointer) >>> 0, 2, __getU32(pointer + 4)),
199-
pc: __getU32(pointer + 8),
200-
memory: __liftArray((pointer) => __liftRecord42(__getU32(pointer)), 2, __getU32(pointer + 12)),
201-
gas: __getI64(pointer + 16),
202-
};
203-
}
204228
function __liftString(pointer) {
205229
if (!pointer) return null;
206230
const end = (pointer + new Uint32Array(memory.buffer)[(pointer - 4) >>> 2]) >>> 1,
@@ -252,6 +276,12 @@ export async function instantiate(module, imports = {}) {
252276
exports.__unpin(buffer);
253277
return header;
254278
}
279+
class Internref extends Number {}
280+
function __lowerInternref(value) {
281+
if (value == null) return 0;
282+
if (value instanceof Internref) return value.valueOf();
283+
throw TypeError("internref expected");
284+
}
255285
const refcounts = new Map();
256286
function __retain(pointer) {
257287
if (pointer) {
@@ -329,5 +359,44 @@ export async function instantiate(module, imports = {}) {
329359
return __dataview.getBigInt64(pointer, true);
330360
}
331361
}
362+
function __getU64(pointer) {
363+
try {
364+
return __dataview.getBigUint64(pointer, true);
365+
} catch {
366+
__dataview = new DataView(memory.buffer);
367+
return __dataview.getBigUint64(pointer, true);
368+
}
369+
}
332370
return adaptedExports;
333371
}
372+
// export const {
373+
// memory,
374+
// InputKind,
375+
// HasMetadata,
376+
// disassemble,
377+
// runProgram,
378+
// runVm,
379+
// getAssembly,
380+
// wrapAsProgram,
381+
// resetGeneric,
382+
// resetGenericWithMemory,
383+
// nextStep,
384+
// nSteps,
385+
// getProgramCounter,
386+
// setNextProgramCounter,
387+
// getStatus,
388+
// getExitArg,
389+
// getGasLeft,
390+
// setGasLeft,
391+
// getRegisters,
392+
// setRegisters,
393+
// getPageDump,
394+
// setMemory,
395+
// } = await (async url => instantiate(
396+
// await (async () => {
397+
// const isNodeOrBun = typeof process != "undefined" && process.versions != null && (process.versions.node != null || process.versions.bun != null);
398+
// if (isNodeOrBun) { return globalThis.WebAssembly.compile(await (await import("node:fs/promises")).readFile(url)); }
399+
// else { return await globalThis.WebAssembly.compileStreaming(globalThis.fetch(url)); }
400+
// })(), {
401+
// }
402+
// ))(new URL("release.wasm", import.meta.url));

src/packages/web-worker/wasmAsShell.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@ export async function createAssemblyScriptWasmPvmShell(module: WebAssembly.Modul
88
const {
99
// memory,
1010
// InputKind,
11+
// HasMetadata,
1112
// disassemble,
1213
// runProgram,
1314
// runVm,
15+
// getAssembly,
16+
// wrapAsProgram,
1417
resetGeneric,
15-
1618
resetGenericWithMemory,
1719
nextStep,
1820
nSteps,

src/packages/web-worker/worker.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,13 @@ export function postTypedMessage(msg: WorkerResponseParams) {
1414
postMessage(msg);
1515
}
1616

17-
onmessage = async (ev: MessageEvent<WorkerRequestParams>) => {
18-
try {
19-
await rawOnMessage(ev);
20-
} catch (e) {
17+
onmessage = (ev: MessageEvent<WorkerRequestParams>) => {
18+
rawOnMessage(ev).catch((e) => {
2119
console.error(e);
22-
}
20+
});
2321
};
2422

25-
const rawOnMessage = async (e: MessageEvent<WorkerRequestParams>) => {
23+
async function rawOnMessage(e: MessageEvent<WorkerRequestParams>) {
2624
if (!e.data?.command) {
2725
return;
2826
}
@@ -150,4 +148,4 @@ const rawOnMessage = async (e: MessageEvent<WorkerRequestParams>) => {
150148
messageId: e.data.messageId,
151149
});
152150
}
153-
};
151+
}

vite.config.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@ export default defineConfig({
1313
"@": path.resolve(__dirname, "./src"),
1414
},
1515
},
16-
server: {
17-
allowedHosts: ["decd-85-221-148-245.ngrok-free.app"],
18-
},
1916
define: {
2017
"import.meta.env.TYPEBERRY_PVM_VERSION": JSON.stringify(
2118
packageJson.dependencies["@typeberry/pvm-debugger-adapter"],

0 commit comments

Comments
 (0)