@fluffylabs/anan-as 1.0.0-791e5e1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/release-raw.d.ts +210 -0
- package/build/release-raw.js +372 -0
- package/build/release-raw.wasm +0 -0
- package/build/tests.d.ts +24 -0
- package/build/tests.js +104 -0
- package/build/tests.wasm +0 -0
- package/package.json +3 -6
package/README.md
CHANGED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
declare namespace __AdaptedExports {
|
|
2
|
+
/** Exported memory */
|
|
3
|
+
export const memory: WebAssembly.Memory;
|
|
4
|
+
/**
|
|
5
|
+
* assembly/api-internal/getAssembly
|
|
6
|
+
* @param p `assembly/program/Program`
|
|
7
|
+
* @returns `~lib/string/String`
|
|
8
|
+
*/
|
|
9
|
+
export function getAssembly(p: __Internref26): string;
|
|
10
|
+
/**
|
|
11
|
+
* assembly/program-build/wrapAsProgram
|
|
12
|
+
* @param bytecode `~lib/typedarray/Uint8Array`
|
|
13
|
+
* @returns `~lib/typedarray/Uint8Array`
|
|
14
|
+
*/
|
|
15
|
+
export function wrapAsProgram(bytecode: Uint8Array): Uint8Array;
|
|
16
|
+
/**
|
|
17
|
+
* assembly/api-debugger/resetJAM
|
|
18
|
+
* @param program `~lib/array/Array<u8>`
|
|
19
|
+
* @param pc `f64`
|
|
20
|
+
* @param initialGas `i64`
|
|
21
|
+
* @param args `~lib/array/Array<u8>`
|
|
22
|
+
* @param hasMetadata `bool`
|
|
23
|
+
*/
|
|
24
|
+
export function resetJAM(program: Array<number>, pc: number, initialGas: bigint, args: Array<number>, hasMetadata?: boolean): void;
|
|
25
|
+
/**
|
|
26
|
+
* assembly/api-debugger/resetGeneric
|
|
27
|
+
* @param program `~lib/array/Array<u8>`
|
|
28
|
+
* @param flatRegisters `~lib/array/Array<u8>`
|
|
29
|
+
* @param initialGas `i64`
|
|
30
|
+
* @param hasMetadata `bool`
|
|
31
|
+
*/
|
|
32
|
+
export function resetGeneric(program: Array<number>, flatRegisters: Array<number>, initialGas: bigint, hasMetadata?: boolean): void;
|
|
33
|
+
/**
|
|
34
|
+
* assembly/api-debugger/resetGenericWithMemory
|
|
35
|
+
* @param program `~lib/array/Array<u8>`
|
|
36
|
+
* @param flatRegisters `~lib/array/Array<u8>`
|
|
37
|
+
* @param pageMap `~lib/typedarray/Uint8Array`
|
|
38
|
+
* @param chunks `~lib/typedarray/Uint8Array`
|
|
39
|
+
* @param initialGas `i64`
|
|
40
|
+
* @param hasMetadata `bool`
|
|
41
|
+
*/
|
|
42
|
+
export function resetGenericWithMemory(program: Array<number>, flatRegisters: Array<number>, pageMap: Uint8Array, chunks: Uint8Array, initialGas: bigint, hasMetadata?: boolean): void;
|
|
43
|
+
/**
|
|
44
|
+
* assembly/api-debugger/nextStep
|
|
45
|
+
* @returns `bool`
|
|
46
|
+
*/
|
|
47
|
+
export function nextStep(): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* assembly/api-debugger/nSteps
|
|
50
|
+
* @param steps `u32`
|
|
51
|
+
* @returns `bool`
|
|
52
|
+
*/
|
|
53
|
+
export function nSteps(steps: number): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* assembly/api-debugger/getProgramCounter
|
|
56
|
+
* @returns `u32`
|
|
57
|
+
*/
|
|
58
|
+
export function getProgramCounter(): number;
|
|
59
|
+
/**
|
|
60
|
+
* assembly/api-debugger/setNextProgramCounter
|
|
61
|
+
* @param pc `u32`
|
|
62
|
+
*/
|
|
63
|
+
export function setNextProgramCounter(pc: number): void;
|
|
64
|
+
/**
|
|
65
|
+
* assembly/api-debugger/getStatus
|
|
66
|
+
* @returns `u8`
|
|
67
|
+
*/
|
|
68
|
+
export function getStatus(): number;
|
|
69
|
+
/**
|
|
70
|
+
* assembly/api-debugger/getExitArg
|
|
71
|
+
* @returns `u32`
|
|
72
|
+
*/
|
|
73
|
+
export function getExitArg(): number;
|
|
74
|
+
/**
|
|
75
|
+
* assembly/api-debugger/getGasLeft
|
|
76
|
+
* @returns `i64`
|
|
77
|
+
*/
|
|
78
|
+
export function getGasLeft(): bigint;
|
|
79
|
+
/**
|
|
80
|
+
* assembly/api-debugger/setGasLeft
|
|
81
|
+
* @param gas `i64`
|
|
82
|
+
*/
|
|
83
|
+
export function setGasLeft(gas: bigint): void;
|
|
84
|
+
/**
|
|
85
|
+
* assembly/api-debugger/getRegisters
|
|
86
|
+
* @returns `~lib/typedarray/Uint8Array`
|
|
87
|
+
*/
|
|
88
|
+
export function getRegisters(): Uint8Array;
|
|
89
|
+
/**
|
|
90
|
+
* assembly/api-debugger/setRegisters
|
|
91
|
+
* @param flatRegisters `~lib/array/Array<u8>`
|
|
92
|
+
*/
|
|
93
|
+
export function setRegisters(flatRegisters: Array<number>): void;
|
|
94
|
+
/**
|
|
95
|
+
* assembly/api-debugger/getPageDump
|
|
96
|
+
* @param index `u32`
|
|
97
|
+
* @returns `~lib/typedarray/Uint8Array`
|
|
98
|
+
*/
|
|
99
|
+
export function getPageDump(index: number): Uint8Array;
|
|
100
|
+
/**
|
|
101
|
+
* assembly/api-debugger/setMemory
|
|
102
|
+
* @param address `u32`
|
|
103
|
+
* @param data `~lib/typedarray/Uint8Array`
|
|
104
|
+
*/
|
|
105
|
+
export function setMemory(address: number, data: Uint8Array): void;
|
|
106
|
+
/** assembly/api-utils/InputKind */
|
|
107
|
+
export enum InputKind {
|
|
108
|
+
/** @type `i32` */
|
|
109
|
+
Generic,
|
|
110
|
+
/** @type `i32` */
|
|
111
|
+
SPI,
|
|
112
|
+
}
|
|
113
|
+
/** assembly/api-utils/HasMetadata */
|
|
114
|
+
export enum HasMetadata {
|
|
115
|
+
/** @type `i32` */
|
|
116
|
+
Yes,
|
|
117
|
+
/** @type `i32` */
|
|
118
|
+
No,
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* assembly/api-utils/getGasCosts
|
|
122
|
+
* @param input `~lib/array/Array<u8>`
|
|
123
|
+
* @param kind `i32`
|
|
124
|
+
* @param withMetadata `i32`
|
|
125
|
+
* @returns `~lib/array/Array<assembly/gas-costs/BlockGasCost>`
|
|
126
|
+
*/
|
|
127
|
+
export function getGasCosts(input: Array<number>, kind: number, withMetadata: number): Array<__Record50<never>>;
|
|
128
|
+
/**
|
|
129
|
+
* assembly/api-utils/disassemble
|
|
130
|
+
* @param input `~lib/array/Array<u8>`
|
|
131
|
+
* @param kind `i32`
|
|
132
|
+
* @param withMetadata `i32`
|
|
133
|
+
* @returns `~lib/string/String`
|
|
134
|
+
*/
|
|
135
|
+
export function disassemble(input: Array<number>, kind: number, withMetadata: number): string;
|
|
136
|
+
/**
|
|
137
|
+
* assembly/api-utils/prepareProgram
|
|
138
|
+
* @param kind `i32`
|
|
139
|
+
* @param hasMetadata `i32`
|
|
140
|
+
* @param program `~lib/array/Array<u8>`
|
|
141
|
+
* @param initialRegisters `~lib/array/Array<u64>`
|
|
142
|
+
* @param initialPageMap `~lib/array/Array<assembly/api-internal/InitialPage>`
|
|
143
|
+
* @param initialMemory `~lib/array/Array<assembly/api-internal/InitialChunk>`
|
|
144
|
+
* @param args `~lib/array/Array<u8>`
|
|
145
|
+
* @returns `assembly/spi/StandardProgram`
|
|
146
|
+
*/
|
|
147
|
+
export function prepareProgram(kind: number, hasMetadata: number, program: Array<number>, initialRegisters: Array<bigint>, initialPageMap: Array<__Record46<undefined>>, initialMemory: Array<__Record48<undefined>>, args: Array<number>): __Internref42;
|
|
148
|
+
/**
|
|
149
|
+
* assembly/api-utils/runProgram
|
|
150
|
+
* @param program `assembly/spi/StandardProgram`
|
|
151
|
+
* @param initialGas `i64`
|
|
152
|
+
* @param programCounter `u32`
|
|
153
|
+
* @param logs `bool`
|
|
154
|
+
* @param useSbrkGas `bool`
|
|
155
|
+
* @returns `assembly/api-internal/VmOutput`
|
|
156
|
+
*/
|
|
157
|
+
export function runProgram(program: __Internref42, initialGas?: bigint, programCounter?: number, logs?: boolean, useSbrkGas?: boolean): __Record55<never>;
|
|
158
|
+
}
|
|
159
|
+
/** assembly/program/Program */
|
|
160
|
+
declare class __Internref26 extends Number {
|
|
161
|
+
private __nominal26: symbol;
|
|
162
|
+
private __nominal0: symbol;
|
|
163
|
+
}
|
|
164
|
+
/** assembly/gas-costs/BlockGasCost */
|
|
165
|
+
declare interface __Record50<TOmittable> {
|
|
166
|
+
/** @type `u32` */
|
|
167
|
+
pc: number | TOmittable;
|
|
168
|
+
/** @type `u64` */
|
|
169
|
+
gas: bigint | TOmittable;
|
|
170
|
+
}
|
|
171
|
+
/** assembly/api-internal/InitialPage */
|
|
172
|
+
declare interface __Record46<TOmittable> {
|
|
173
|
+
/** @type `u32` */
|
|
174
|
+
address: number | TOmittable;
|
|
175
|
+
/** @type `u32` */
|
|
176
|
+
length: number | TOmittable;
|
|
177
|
+
/** @type `i32` */
|
|
178
|
+
access: number | TOmittable;
|
|
179
|
+
}
|
|
180
|
+
/** assembly/api-internal/InitialChunk */
|
|
181
|
+
declare interface __Record48<TOmittable> {
|
|
182
|
+
/** @type `u32` */
|
|
183
|
+
address: number | TOmittable;
|
|
184
|
+
/** @type `~lib/array/Array<u8>` */
|
|
185
|
+
data: Array<number>;
|
|
186
|
+
}
|
|
187
|
+
/** assembly/spi/StandardProgram */
|
|
188
|
+
declare class __Internref42 extends Number {
|
|
189
|
+
private __nominal42: symbol;
|
|
190
|
+
private __nominal0: symbol;
|
|
191
|
+
}
|
|
192
|
+
/** assembly/api-internal/VmOutput */
|
|
193
|
+
declare interface __Record55<TOmittable> {
|
|
194
|
+
/** @type `i32` */
|
|
195
|
+
status: number | TOmittable;
|
|
196
|
+
/** @type `~lib/array/Array<u64>` */
|
|
197
|
+
registers: Array<bigint>;
|
|
198
|
+
/** @type `u32` */
|
|
199
|
+
pc: number | TOmittable;
|
|
200
|
+
/** @type `~lib/array/Array<assembly/api-internal/InitialChunk>` */
|
|
201
|
+
memory: Array<__Record48<never>>;
|
|
202
|
+
/** @type `i64` */
|
|
203
|
+
gas: bigint | TOmittable;
|
|
204
|
+
/** @type `u32` */
|
|
205
|
+
exitCode: number | TOmittable;
|
|
206
|
+
}
|
|
207
|
+
/** Instantiates the compiled WebAssembly module with the given imports. */
|
|
208
|
+
export declare function instantiate(module: WebAssembly.Module, imports: {
|
|
209
|
+
env: unknown,
|
|
210
|
+
}): Promise<typeof __AdaptedExports>;
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
export async function instantiate(module, imports = {}) {
|
|
2
|
+
const adaptedImports = {
|
|
3
|
+
env: Object.setPrototypeOf({
|
|
4
|
+
abort(message, fileName, lineNumber, columnNumber) {
|
|
5
|
+
// ~lib/builtins/abort(~lib/string/String | null?, ~lib/string/String | null?, u32?, u32?) => void
|
|
6
|
+
message = __liftString(message >>> 0);
|
|
7
|
+
fileName = __liftString(fileName >>> 0);
|
|
8
|
+
lineNumber = lineNumber >>> 0;
|
|
9
|
+
columnNumber = columnNumber >>> 0;
|
|
10
|
+
(() => {
|
|
11
|
+
// @external.js
|
|
12
|
+
throw Error(`${message} in ${fileName}:${lineNumber}:${columnNumber}`);
|
|
13
|
+
})();
|
|
14
|
+
},
|
|
15
|
+
"console.log"(text) {
|
|
16
|
+
// ~lib/bindings/dom/console.log(~lib/string/String) => void
|
|
17
|
+
text = __liftString(text >>> 0);
|
|
18
|
+
console.log(text);
|
|
19
|
+
},
|
|
20
|
+
}, Object.assign(Object.create(globalThis), imports.env || {})),
|
|
21
|
+
};
|
|
22
|
+
const { exports } = await WebAssembly.instantiate(module, adaptedImports);
|
|
23
|
+
const memory = exports.memory || imports.env.memory;
|
|
24
|
+
const adaptedExports = Object.setPrototypeOf({
|
|
25
|
+
getAssembly(p) {
|
|
26
|
+
// assembly/api-internal/getAssembly(assembly/program/Program) => ~lib/string/String
|
|
27
|
+
p = __lowerInternref(p) || __notnull();
|
|
28
|
+
return __liftString(exports.getAssembly(p) >>> 0);
|
|
29
|
+
},
|
|
30
|
+
wrapAsProgram(bytecode) {
|
|
31
|
+
// assembly/program-build/wrapAsProgram(~lib/typedarray/Uint8Array) => ~lib/typedarray/Uint8Array
|
|
32
|
+
bytecode = __lowerTypedArray(Uint8Array, 10, 0, bytecode) || __notnull();
|
|
33
|
+
return __liftTypedArray(Uint8Array, exports.wrapAsProgram(bytecode) >>> 0);
|
|
34
|
+
},
|
|
35
|
+
resetJAM(program, pc, initialGas, args, hasMetadata) {
|
|
36
|
+
// assembly/api-debugger/resetJAM(~lib/array/Array<u8>, f64, i64, ~lib/array/Array<u8>, bool?) => void
|
|
37
|
+
program = __retain(__lowerArray(__setU8, 6, 0, program) || __notnull());
|
|
38
|
+
initialGas = initialGas || 0n;
|
|
39
|
+
args = __lowerArray(__setU8, 6, 0, args) || __notnull();
|
|
40
|
+
hasMetadata = hasMetadata ? 1 : 0;
|
|
41
|
+
try {
|
|
42
|
+
exports.__setArgumentsLength(arguments.length);
|
|
43
|
+
exports.resetJAM(program, pc, initialGas, args, hasMetadata);
|
|
44
|
+
} finally {
|
|
45
|
+
__release(program);
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
resetGeneric(program, flatRegisters, initialGas, hasMetadata) {
|
|
49
|
+
// assembly/api-debugger/resetGeneric(~lib/array/Array<u8>, ~lib/array/Array<u8>, i64, bool?) => void
|
|
50
|
+
program = __retain(__lowerArray(__setU8, 6, 0, program) || __notnull());
|
|
51
|
+
flatRegisters = __lowerArray(__setU8, 6, 0, flatRegisters) || __notnull();
|
|
52
|
+
initialGas = initialGas || 0n;
|
|
53
|
+
hasMetadata = hasMetadata ? 1 : 0;
|
|
54
|
+
try {
|
|
55
|
+
exports.__setArgumentsLength(arguments.length);
|
|
56
|
+
exports.resetGeneric(program, flatRegisters, initialGas, hasMetadata);
|
|
57
|
+
} finally {
|
|
58
|
+
__release(program);
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
resetGenericWithMemory(program, flatRegisters, pageMap, chunks, initialGas, hasMetadata) {
|
|
62
|
+
// assembly/api-debugger/resetGenericWithMemory(~lib/array/Array<u8>, ~lib/array/Array<u8>, ~lib/typedarray/Uint8Array, ~lib/typedarray/Uint8Array, i64, bool?) => void
|
|
63
|
+
program = __retain(__lowerArray(__setU8, 6, 0, program) || __notnull());
|
|
64
|
+
flatRegisters = __retain(__lowerArray(__setU8, 6, 0, flatRegisters) || __notnull());
|
|
65
|
+
pageMap = __retain(__lowerTypedArray(Uint8Array, 10, 0, pageMap) || __notnull());
|
|
66
|
+
chunks = __lowerTypedArray(Uint8Array, 10, 0, chunks) || __notnull();
|
|
67
|
+
initialGas = initialGas || 0n;
|
|
68
|
+
hasMetadata = hasMetadata ? 1 : 0;
|
|
69
|
+
try {
|
|
70
|
+
exports.__setArgumentsLength(arguments.length);
|
|
71
|
+
exports.resetGenericWithMemory(program, flatRegisters, pageMap, chunks, initialGas, hasMetadata);
|
|
72
|
+
} finally {
|
|
73
|
+
__release(program);
|
|
74
|
+
__release(flatRegisters);
|
|
75
|
+
__release(pageMap);
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
nextStep() {
|
|
79
|
+
// assembly/api-debugger/nextStep() => bool
|
|
80
|
+
return exports.nextStep() != 0;
|
|
81
|
+
},
|
|
82
|
+
nSteps(steps) {
|
|
83
|
+
// assembly/api-debugger/nSteps(u32) => bool
|
|
84
|
+
return exports.nSteps(steps) != 0;
|
|
85
|
+
},
|
|
86
|
+
getProgramCounter() {
|
|
87
|
+
// assembly/api-debugger/getProgramCounter() => u32
|
|
88
|
+
return exports.getProgramCounter() >>> 0;
|
|
89
|
+
},
|
|
90
|
+
getExitArg() {
|
|
91
|
+
// assembly/api-debugger/getExitArg() => u32
|
|
92
|
+
return exports.getExitArg() >>> 0;
|
|
93
|
+
},
|
|
94
|
+
setGasLeft(gas) {
|
|
95
|
+
// assembly/api-debugger/setGasLeft(i64) => void
|
|
96
|
+
gas = gas || 0n;
|
|
97
|
+
exports.setGasLeft(gas);
|
|
98
|
+
},
|
|
99
|
+
getRegisters() {
|
|
100
|
+
// assembly/api-debugger/getRegisters() => ~lib/typedarray/Uint8Array
|
|
101
|
+
return __liftTypedArray(Uint8Array, exports.getRegisters() >>> 0);
|
|
102
|
+
},
|
|
103
|
+
setRegisters(flatRegisters) {
|
|
104
|
+
// assembly/api-debugger/setRegisters(~lib/array/Array<u8>) => void
|
|
105
|
+
flatRegisters = __lowerArray(__setU8, 6, 0, flatRegisters) || __notnull();
|
|
106
|
+
exports.setRegisters(flatRegisters);
|
|
107
|
+
},
|
|
108
|
+
getPageDump(index) {
|
|
109
|
+
// assembly/api-debugger/getPageDump(u32) => ~lib/typedarray/Uint8Array
|
|
110
|
+
return __liftTypedArray(Uint8Array, exports.getPageDump(index) >>> 0);
|
|
111
|
+
},
|
|
112
|
+
setMemory(address, data) {
|
|
113
|
+
// assembly/api-debugger/setMemory(u32, ~lib/typedarray/Uint8Array) => void
|
|
114
|
+
data = __lowerTypedArray(Uint8Array, 10, 0, data) || __notnull();
|
|
115
|
+
exports.setMemory(address, data);
|
|
116
|
+
},
|
|
117
|
+
InputKind: (values => (
|
|
118
|
+
// assembly/api-utils/InputKind
|
|
119
|
+
values[values.Generic = exports["InputKind.Generic"].valueOf()] = "Generic",
|
|
120
|
+
values[values.SPI = exports["InputKind.SPI"].valueOf()] = "SPI",
|
|
121
|
+
values
|
|
122
|
+
))({}),
|
|
123
|
+
HasMetadata: (values => (
|
|
124
|
+
// assembly/api-utils/HasMetadata
|
|
125
|
+
values[values.Yes = exports["HasMetadata.Yes"].valueOf()] = "Yes",
|
|
126
|
+
values[values.No = exports["HasMetadata.No"].valueOf()] = "No",
|
|
127
|
+
values
|
|
128
|
+
))({}),
|
|
129
|
+
getGasCosts(input, kind, withMetadata) {
|
|
130
|
+
// assembly/api-utils/getGasCosts(~lib/array/Array<u8>, i32, i32) => ~lib/array/Array<assembly/gas-costs/BlockGasCost>
|
|
131
|
+
input = __lowerArray(__setU8, 6, 0, input) || __notnull();
|
|
132
|
+
return __liftArray(pointer => __liftRecord50(__getU32(pointer)), 2, exports.getGasCosts(input, kind, withMetadata) >>> 0);
|
|
133
|
+
},
|
|
134
|
+
disassemble(input, kind, withMetadata) {
|
|
135
|
+
// assembly/api-utils/disassemble(~lib/array/Array<u8>, i32, i32) => ~lib/string/String
|
|
136
|
+
input = __lowerArray(__setU8, 6, 0, input) || __notnull();
|
|
137
|
+
return __liftString(exports.disassemble(input, kind, withMetadata) >>> 0);
|
|
138
|
+
},
|
|
139
|
+
prepareProgram(kind, hasMetadata, program, initialRegisters, initialPageMap, initialMemory, args) {
|
|
140
|
+
// assembly/api-utils/prepareProgram(i32, i32, ~lib/array/Array<u8>, ~lib/array/Array<u64>, ~lib/array/Array<assembly/api-internal/InitialPage>, ~lib/array/Array<assembly/api-internal/InitialChunk>, ~lib/array/Array<u8>) => assembly/spi/StandardProgram
|
|
141
|
+
program = __retain(__lowerArray(__setU8, 6, 0, program) || __notnull());
|
|
142
|
+
initialRegisters = __retain(__lowerArray(__setU64, 52, 3, initialRegisters) || __notnull());
|
|
143
|
+
initialPageMap = __retain(__lowerArray((pointer, value) => { __setU32(pointer, __lowerRecord46(value) || __notnull()); }, 47, 2, initialPageMap) || __notnull());
|
|
144
|
+
initialMemory = __retain(__lowerArray((pointer, value) => { __setU32(pointer, __lowerRecord48(value) || __notnull()); }, 49, 2, initialMemory) || __notnull());
|
|
145
|
+
args = __lowerArray(__setU8, 6, 0, args) || __notnull();
|
|
146
|
+
try {
|
|
147
|
+
return __liftInternref(exports.prepareProgram(kind, hasMetadata, program, initialRegisters, initialPageMap, initialMemory, args) >>> 0);
|
|
148
|
+
} finally {
|
|
149
|
+
__release(program);
|
|
150
|
+
__release(initialRegisters);
|
|
151
|
+
__release(initialPageMap);
|
|
152
|
+
__release(initialMemory);
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
runProgram(program, initialGas, programCounter, logs, useSbrkGas) {
|
|
156
|
+
// assembly/api-utils/runProgram(assembly/spi/StandardProgram, i64?, u32?, bool?, bool?) => assembly/api-internal/VmOutput
|
|
157
|
+
program = __lowerInternref(program) || __notnull();
|
|
158
|
+
initialGas = initialGas || 0n;
|
|
159
|
+
logs = logs ? 1 : 0;
|
|
160
|
+
useSbrkGas = useSbrkGas ? 1 : 0;
|
|
161
|
+
exports.__setArgumentsLength(arguments.length);
|
|
162
|
+
return __liftRecord55(exports.runProgram(program, initialGas, programCounter, logs, useSbrkGas) >>> 0);
|
|
163
|
+
},
|
|
164
|
+
}, exports);
|
|
165
|
+
function __liftRecord50(pointer) {
|
|
166
|
+
// assembly/gas-costs/BlockGasCost
|
|
167
|
+
// Hint: Opt-out from lifting as a record by providing an empty constructor
|
|
168
|
+
if (!pointer) return null;
|
|
169
|
+
return {
|
|
170
|
+
pc: __getU32(pointer + 0),
|
|
171
|
+
gas: __getU64(pointer + 8),
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
function __lowerRecord46(value) {
|
|
175
|
+
// assembly/api-internal/InitialPage
|
|
176
|
+
// Hint: Opt-out from lowering as a record by providing an empty constructor
|
|
177
|
+
if (value == null) return 0;
|
|
178
|
+
const pointer = exports.__pin(exports.__new(12, 46));
|
|
179
|
+
__setU32(pointer + 0, value.address);
|
|
180
|
+
__setU32(pointer + 4, value.length);
|
|
181
|
+
__setU32(pointer + 8, value.access);
|
|
182
|
+
exports.__unpin(pointer);
|
|
183
|
+
return pointer;
|
|
184
|
+
}
|
|
185
|
+
function __lowerRecord48(value) {
|
|
186
|
+
// assembly/api-internal/InitialChunk
|
|
187
|
+
// Hint: Opt-out from lowering as a record by providing an empty constructor
|
|
188
|
+
if (value == null) return 0;
|
|
189
|
+
const pointer = exports.__pin(exports.__new(8, 48));
|
|
190
|
+
__setU32(pointer + 0, value.address);
|
|
191
|
+
__setU32(pointer + 4, __lowerArray(__setU8, 6, 0, value.data) || __notnull());
|
|
192
|
+
exports.__unpin(pointer);
|
|
193
|
+
return pointer;
|
|
194
|
+
}
|
|
195
|
+
function __liftRecord48(pointer) {
|
|
196
|
+
// assembly/api-internal/InitialChunk
|
|
197
|
+
// Hint: Opt-out from lifting as a record by providing an empty constructor
|
|
198
|
+
if (!pointer) return null;
|
|
199
|
+
return {
|
|
200
|
+
address: __getU32(pointer + 0),
|
|
201
|
+
data: __liftArray(__getU8, 0, __getU32(pointer + 4)),
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
function __liftRecord55(pointer) {
|
|
205
|
+
// assembly/api-internal/VmOutput
|
|
206
|
+
// Hint: Opt-out from lifting as a record by providing an empty constructor
|
|
207
|
+
if (!pointer) return null;
|
|
208
|
+
return {
|
|
209
|
+
status: __getI32(pointer + 0),
|
|
210
|
+
registers: __liftArray(pointer => BigInt.asUintN(64, __getU64(pointer)), 3, __getU32(pointer + 4)),
|
|
211
|
+
pc: __getU32(pointer + 8),
|
|
212
|
+
memory: __liftArray(pointer => __liftRecord48(__getU32(pointer)), 2, __getU32(pointer + 12)),
|
|
213
|
+
gas: __getI64(pointer + 16),
|
|
214
|
+
exitCode: __getU32(pointer + 24),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
function __liftString(pointer) {
|
|
218
|
+
if (!pointer) return null;
|
|
219
|
+
const
|
|
220
|
+
end = pointer + new Uint32Array(memory.buffer)[pointer - 4 >>> 2] >>> 1,
|
|
221
|
+
memoryU16 = new Uint16Array(memory.buffer);
|
|
222
|
+
let
|
|
223
|
+
start = pointer >>> 1,
|
|
224
|
+
string = "";
|
|
225
|
+
while (end - start > 1024) string += String.fromCharCode(...memoryU16.subarray(start, start += 1024));
|
|
226
|
+
return string + String.fromCharCode(...memoryU16.subarray(start, end));
|
|
227
|
+
}
|
|
228
|
+
function __liftArray(liftElement, align, pointer) {
|
|
229
|
+
if (!pointer) return null;
|
|
230
|
+
const
|
|
231
|
+
dataStart = __getU32(pointer + 4),
|
|
232
|
+
length = __dataview.getUint32(pointer + 12, true),
|
|
233
|
+
values = new Array(length);
|
|
234
|
+
for (let i = 0; i < length; ++i) values[i] = liftElement(dataStart + (i << align >>> 0));
|
|
235
|
+
return values;
|
|
236
|
+
}
|
|
237
|
+
function __lowerArray(lowerElement, id, align, values) {
|
|
238
|
+
if (values == null) return 0;
|
|
239
|
+
const
|
|
240
|
+
length = values.length,
|
|
241
|
+
buffer = exports.__pin(exports.__new(length << align, 1)) >>> 0,
|
|
242
|
+
header = exports.__pin(exports.__new(16, id)) >>> 0;
|
|
243
|
+
__setU32(header + 0, buffer);
|
|
244
|
+
__dataview.setUint32(header + 4, buffer, true);
|
|
245
|
+
__dataview.setUint32(header + 8, length << align, true);
|
|
246
|
+
__dataview.setUint32(header + 12, length, true);
|
|
247
|
+
for (let i = 0; i < length; ++i) lowerElement(buffer + (i << align >>> 0), values[i]);
|
|
248
|
+
exports.__unpin(buffer);
|
|
249
|
+
exports.__unpin(header);
|
|
250
|
+
return header;
|
|
251
|
+
}
|
|
252
|
+
function __liftTypedArray(constructor, pointer) {
|
|
253
|
+
if (!pointer) return null;
|
|
254
|
+
return new constructor(
|
|
255
|
+
memory.buffer,
|
|
256
|
+
__getU32(pointer + 4),
|
|
257
|
+
__dataview.getUint32(pointer + 8, true) / constructor.BYTES_PER_ELEMENT
|
|
258
|
+
).slice();
|
|
259
|
+
}
|
|
260
|
+
function __lowerTypedArray(constructor, id, align, values) {
|
|
261
|
+
if (values == null) return 0;
|
|
262
|
+
const
|
|
263
|
+
length = values.length,
|
|
264
|
+
buffer = exports.__pin(exports.__new(length << align, 1)) >>> 0,
|
|
265
|
+
header = exports.__new(12, id) >>> 0;
|
|
266
|
+
__setU32(header + 0, buffer);
|
|
267
|
+
__dataview.setUint32(header + 4, buffer, true);
|
|
268
|
+
__dataview.setUint32(header + 8, length << align, true);
|
|
269
|
+
new constructor(memory.buffer, buffer, length).set(values);
|
|
270
|
+
exports.__unpin(buffer);
|
|
271
|
+
return header;
|
|
272
|
+
}
|
|
273
|
+
class Internref extends Number {}
|
|
274
|
+
const registry = new FinalizationRegistry(__release);
|
|
275
|
+
function __liftInternref(pointer) {
|
|
276
|
+
if (!pointer) return null;
|
|
277
|
+
const sentinel = new Internref(__retain(pointer));
|
|
278
|
+
registry.register(sentinel, pointer);
|
|
279
|
+
return sentinel;
|
|
280
|
+
}
|
|
281
|
+
function __lowerInternref(value) {
|
|
282
|
+
if (value == null) return 0;
|
|
283
|
+
if (value instanceof Internref) return value.valueOf();
|
|
284
|
+
throw TypeError("internref expected");
|
|
285
|
+
}
|
|
286
|
+
const refcounts = new Map();
|
|
287
|
+
function __retain(pointer) {
|
|
288
|
+
if (pointer) {
|
|
289
|
+
const refcount = refcounts.get(pointer);
|
|
290
|
+
if (refcount) refcounts.set(pointer, refcount + 1);
|
|
291
|
+
else refcounts.set(exports.__pin(pointer), 1);
|
|
292
|
+
}
|
|
293
|
+
return pointer;
|
|
294
|
+
}
|
|
295
|
+
function __release(pointer) {
|
|
296
|
+
if (pointer) {
|
|
297
|
+
const refcount = refcounts.get(pointer);
|
|
298
|
+
if (refcount === 1) exports.__unpin(pointer), refcounts.delete(pointer);
|
|
299
|
+
else if (refcount) refcounts.set(pointer, refcount - 1);
|
|
300
|
+
else throw Error(`invalid refcount '${refcount}' for reference '${pointer}'`);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
function __notnull() {
|
|
304
|
+
throw TypeError("value must not be null");
|
|
305
|
+
}
|
|
306
|
+
let __dataview = new DataView(memory.buffer);
|
|
307
|
+
function __setU8(pointer, value) {
|
|
308
|
+
try {
|
|
309
|
+
__dataview.setUint8(pointer, value, true);
|
|
310
|
+
} catch {
|
|
311
|
+
__dataview = new DataView(memory.buffer);
|
|
312
|
+
__dataview.setUint8(pointer, value, true);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
function __setU32(pointer, value) {
|
|
316
|
+
try {
|
|
317
|
+
__dataview.setUint32(pointer, value, true);
|
|
318
|
+
} catch {
|
|
319
|
+
__dataview = new DataView(memory.buffer);
|
|
320
|
+
__dataview.setUint32(pointer, value, true);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
function __setU64(pointer, value) {
|
|
324
|
+
try {
|
|
325
|
+
__dataview.setBigUint64(pointer, value, true);
|
|
326
|
+
} catch {
|
|
327
|
+
__dataview = new DataView(memory.buffer);
|
|
328
|
+
__dataview.setBigUint64(pointer, value, true);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
function __getU8(pointer) {
|
|
332
|
+
try {
|
|
333
|
+
return __dataview.getUint8(pointer, true);
|
|
334
|
+
} catch {
|
|
335
|
+
__dataview = new DataView(memory.buffer);
|
|
336
|
+
return __dataview.getUint8(pointer, true);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
function __getI32(pointer) {
|
|
340
|
+
try {
|
|
341
|
+
return __dataview.getInt32(pointer, true);
|
|
342
|
+
} catch {
|
|
343
|
+
__dataview = new DataView(memory.buffer);
|
|
344
|
+
return __dataview.getInt32(pointer, true);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
function __getU32(pointer) {
|
|
348
|
+
try {
|
|
349
|
+
return __dataview.getUint32(pointer, true);
|
|
350
|
+
} catch {
|
|
351
|
+
__dataview = new DataView(memory.buffer);
|
|
352
|
+
return __dataview.getUint32(pointer, true);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
function __getI64(pointer) {
|
|
356
|
+
try {
|
|
357
|
+
return __dataview.getBigInt64(pointer, true);
|
|
358
|
+
} catch {
|
|
359
|
+
__dataview = new DataView(memory.buffer);
|
|
360
|
+
return __dataview.getBigInt64(pointer, true);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
function __getU64(pointer) {
|
|
364
|
+
try {
|
|
365
|
+
return __dataview.getBigUint64(pointer, true);
|
|
366
|
+
} catch {
|
|
367
|
+
__dataview = new DataView(memory.buffer);
|
|
368
|
+
return __dataview.getBigUint64(pointer, true);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
return adaptedExports;
|
|
372
|
+
}
|
|
Binary file
|
package/build/tests.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Exported memory */
|
|
2
|
+
export declare const memory: WebAssembly.Memory;
|
|
3
|
+
/**
|
|
4
|
+
* assembly/tests/test
|
|
5
|
+
* @param name `~lib/string/String`
|
|
6
|
+
* @param cb `() => void`
|
|
7
|
+
*/
|
|
8
|
+
export declare function test(name: string, cb: __Internref21): void;
|
|
9
|
+
/**
|
|
10
|
+
* assembly/tests/assertEqual<u64>
|
|
11
|
+
* @param a `u64`
|
|
12
|
+
* @param b `u64`
|
|
13
|
+
* @param msg `~lib/string/String`
|
|
14
|
+
*/
|
|
15
|
+
export declare function assertEqual(a: bigint, b: bigint, msg?: string): void;
|
|
16
|
+
/**
|
|
17
|
+
* assembly/tests/runTests
|
|
18
|
+
*/
|
|
19
|
+
export declare function runTests(): void;
|
|
20
|
+
/** ~lib/function/Function<%28%29=>void> */
|
|
21
|
+
declare class __Internref21 extends Number {
|
|
22
|
+
private __nominal21: symbol;
|
|
23
|
+
private __nominal0: symbol;
|
|
24
|
+
}
|
package/build/tests.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
async function instantiate(module, imports = {}) {
|
|
2
|
+
const adaptedImports = {
|
|
3
|
+
env: Object.assign(Object.create(globalThis), imports.env || {}, {
|
|
4
|
+
abort(message, fileName, lineNumber, columnNumber) {
|
|
5
|
+
// ~lib/builtins/abort(~lib/string/String | null?, ~lib/string/String | null?, u32?, u32?) => void
|
|
6
|
+
message = __liftString(message >>> 0);
|
|
7
|
+
fileName = __liftString(fileName >>> 0);
|
|
8
|
+
lineNumber = lineNumber >>> 0;
|
|
9
|
+
columnNumber = columnNumber >>> 0;
|
|
10
|
+
(() => {
|
|
11
|
+
// @external.js
|
|
12
|
+
throw Error(`${message} in ${fileName}:${lineNumber}:${columnNumber}`);
|
|
13
|
+
})();
|
|
14
|
+
},
|
|
15
|
+
"console.log"(text) {
|
|
16
|
+
// ~lib/bindings/dom/console.log(~lib/string/String) => void
|
|
17
|
+
text = __liftString(text >>> 0);
|
|
18
|
+
console.log(text);
|
|
19
|
+
},
|
|
20
|
+
}),
|
|
21
|
+
};
|
|
22
|
+
const { exports } = await WebAssembly.instantiate(module, adaptedImports);
|
|
23
|
+
const memory = exports.memory || imports.env.memory;
|
|
24
|
+
const adaptedExports = Object.setPrototypeOf({
|
|
25
|
+
test(name, cb) {
|
|
26
|
+
// assembly/tests/test(~lib/string/String, () => void) => void
|
|
27
|
+
name = __retain(__lowerString(name) || __notnull());
|
|
28
|
+
cb = __lowerInternref(cb) || __notnull();
|
|
29
|
+
try {
|
|
30
|
+
exports.test(name, cb);
|
|
31
|
+
} finally {
|
|
32
|
+
__release(name);
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
assertEqual(a, b, msg) {
|
|
36
|
+
// assembly/tests/assertEqual<u64>(u64, u64, ~lib/string/String?) => void
|
|
37
|
+
a = a || 0n;
|
|
38
|
+
b = b || 0n;
|
|
39
|
+
msg = __lowerString(msg) || __notnull();
|
|
40
|
+
exports.__setArgumentsLength(arguments.length);
|
|
41
|
+
exports.assertEqual(a, b, msg);
|
|
42
|
+
},
|
|
43
|
+
}, exports);
|
|
44
|
+
function __liftString(pointer) {
|
|
45
|
+
if (!pointer) return null;
|
|
46
|
+
const
|
|
47
|
+
end = pointer + new Uint32Array(memory.buffer)[pointer - 4 >>> 2] >>> 1,
|
|
48
|
+
memoryU16 = new Uint16Array(memory.buffer);
|
|
49
|
+
let
|
|
50
|
+
start = pointer >>> 1,
|
|
51
|
+
string = "";
|
|
52
|
+
while (end - start > 1024) string += String.fromCharCode(...memoryU16.subarray(start, start += 1024));
|
|
53
|
+
return string + String.fromCharCode(...memoryU16.subarray(start, end));
|
|
54
|
+
}
|
|
55
|
+
function __lowerString(value) {
|
|
56
|
+
if (value == null) return 0;
|
|
57
|
+
const
|
|
58
|
+
length = value.length,
|
|
59
|
+
pointer = exports.__new(length << 1, 2) >>> 0,
|
|
60
|
+
memoryU16 = new Uint16Array(memory.buffer);
|
|
61
|
+
for (let i = 0; i < length; ++i) memoryU16[(pointer >>> 1) + i] = value.charCodeAt(i);
|
|
62
|
+
return pointer;
|
|
63
|
+
}
|
|
64
|
+
class Internref extends Number {}
|
|
65
|
+
function __lowerInternref(value) {
|
|
66
|
+
if (value == null) return 0;
|
|
67
|
+
if (value instanceof Internref) return value.valueOf();
|
|
68
|
+
throw TypeError("internref expected");
|
|
69
|
+
}
|
|
70
|
+
const refcounts = new Map();
|
|
71
|
+
function __retain(pointer) {
|
|
72
|
+
if (pointer) {
|
|
73
|
+
const refcount = refcounts.get(pointer);
|
|
74
|
+
if (refcount) refcounts.set(pointer, refcount + 1);
|
|
75
|
+
else refcounts.set(exports.__pin(pointer), 1);
|
|
76
|
+
}
|
|
77
|
+
return pointer;
|
|
78
|
+
}
|
|
79
|
+
function __release(pointer) {
|
|
80
|
+
if (pointer) {
|
|
81
|
+
const refcount = refcounts.get(pointer);
|
|
82
|
+
if (refcount === 1) exports.__unpin(pointer), refcounts.delete(pointer);
|
|
83
|
+
else if (refcount) refcounts.set(pointer, refcount - 1);
|
|
84
|
+
else throw Error(`invalid refcount '${refcount}' for reference '${pointer}'`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function __notnull() {
|
|
88
|
+
throw TypeError("value must not be null");
|
|
89
|
+
}
|
|
90
|
+
return adaptedExports;
|
|
91
|
+
}
|
|
92
|
+
export const {
|
|
93
|
+
memory,
|
|
94
|
+
test,
|
|
95
|
+
assertEqual,
|
|
96
|
+
runTests,
|
|
97
|
+
} = await (async url => instantiate(
|
|
98
|
+
await (async () => {
|
|
99
|
+
const isNodeOrBun = typeof process != "undefined" && process.versions != null && (process.versions.node != null || process.versions.bun != null);
|
|
100
|
+
if (isNodeOrBun) { return globalThis.WebAssembly.compile(await (await import("node:fs/promises")).readFile(url)); }
|
|
101
|
+
else { return await globalThis.WebAssembly.compileStreaming(globalThis.fetch(url)); }
|
|
102
|
+
})(), {
|
|
103
|
+
}
|
|
104
|
+
))(new URL("tests.wasm", import.meta.url));
|
package/build/tests.wasm
ADDED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluffylabs/anan-as",
|
|
3
3
|
"description": "AssemblyScript PVM interpreter.",
|
|
4
|
-
"version": "1.0.0
|
|
4
|
+
"version": "1.0.0",
|
|
5
5
|
"main": "./bin/index.js",
|
|
6
|
-
"repository": {
|
|
7
|
-
"url": "https://github.com/tomusdrw/anan-as"
|
|
8
|
-
},
|
|
9
6
|
"scripts": {
|
|
10
7
|
"asbuild": "npm run asbuild:debug && npm run asbuild:release && npm run asbuild:raw && npm run asbuild:release-mini",
|
|
11
8
|
"asbuild:debug": "asc assembly/index.ts --target debug",
|
|
@@ -60,8 +57,8 @@
|
|
|
60
57
|
"types": "./build/release.d.ts"
|
|
61
58
|
},
|
|
62
59
|
"./release-mini": {
|
|
63
|
-
"import": "./build/release
|
|
64
|
-
"types": "./build/release
|
|
60
|
+
"import": "./build/release.js",
|
|
61
|
+
"types": "./build/release.d.ts"
|
|
65
62
|
},
|
|
66
63
|
"./raw": {
|
|
67
64
|
"import": "./build/debug-raw.js",
|