@fluffylabs/anan-as 1.0.0-791e5e1 → 1.0.0-8651050
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 +21 -18
- package/build/debug-raw.d.ts +7 -0
- package/build/debug-raw.js +4 -0
- package/build/debug-raw.wasm +0 -0
- package/build/debug.d.ts +7 -0
- package/build/debug.js +5 -0
- package/build/debug.wasm +0 -0
- package/build/release-mini.d.ts +7 -0
- package/build/release-mini.js +5 -0
- package/build/release-mini.wasm +0 -0
- package/build/release-stub.d.ts +217 -0
- package/build/release-stub.js +415 -0
- package/build/release-stub.wasm +0 -0
- package/build/release.d.ts +7 -0
- package/build/release.js +5 -0
- package/build/release.wasm +0 -0
- package/package.json +21 -11
package/README.md
CHANGED
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
# 🍍 anan-as
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
AssemblyScript implementation of the JAM PVM (64-bit).
|
|
4
4
|
|
|
5
5
|
[Demo](https://todr.me/anan-as)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Todo
|
|
8
8
|
|
|
9
9
|
- [x] Memory
|
|
10
10
|
- [x] [JAM tests](https://github.com/w3f/jamtestvectors/pull/3) compatibility
|
|
11
11
|
- [x] 64-bit & new instructions ([GrayPaper v0.5.0](https://graypaper.fluffylabs.dev))
|
|
12
12
|
- [x] GP 0.5.4 compatibility (ZBB extensions)
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
## Why?
|
|
15
15
|
|
|
16
|
-
- [
|
|
16
|
+
- [Pineapples](https://en.wikipedia.org/wiki/Ananas) are cool.
|
|
17
17
|
- [JAM](https://graypaper.com/) is promising.
|
|
18
18
|
- [PVM](https://github.com/paritytech/polkavm) is neat.
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
### Useful where?
|
|
20
|
+
## Useful where?
|
|
22
21
|
|
|
23
22
|
- Potentially as an alternative implementation for [`typeberry`](https://github.com/fluffylabs).
|
|
24
23
|
- To test out the [PVM debugger](https://pvm.fluffylabs.dev).
|
|
@@ -54,9 +53,11 @@ ananAs.__collect();
|
|
|
54
53
|
|
|
55
54
|
```
|
|
56
55
|
|
|
57
|
-
|
|
56
|
+
## Raw Bindings
|
|
58
57
|
|
|
59
|
-
Raw bindings give you direct access to WebAssembly exports
|
|
58
|
+
Raw bindings give you direct access to WebAssembly exports
|
|
59
|
+
without the JavaScript wrapper layer.
|
|
60
|
+
This is useful for instantiating multiple instances or when you need more control:
|
|
60
61
|
|
|
61
62
|
```javascript
|
|
62
63
|
// Raw bindings
|
|
@@ -74,9 +75,10 @@ const ananAs = await instantiate(module);
|
|
|
74
75
|
|
|
75
76
|
```
|
|
76
77
|
|
|
77
|
-
|
|
78
|
+
## Version Tags
|
|
78
79
|
|
|
79
|
-
When installing the package, you can choose between stable releases
|
|
80
|
+
When installing the package, you can choose between stable releases
|
|
81
|
+
and bleeding-edge builds:
|
|
80
82
|
|
|
81
83
|
```bash
|
|
82
84
|
# Latest stable release
|
|
@@ -89,24 +91,25 @@ npm install @fluffylabs/anan-as@next
|
|
|
89
91
|
## Building
|
|
90
92
|
|
|
91
93
|
To download the dependencies:
|
|
92
|
-
|
|
93
|
-
|
|
94
|
+
|
|
95
|
+
```cmd
|
|
96
|
+
npm ci
|
|
94
97
|
```
|
|
95
98
|
|
|
96
99
|
To build the WASM modules (in `./build/{release,debug}.wasm`):
|
|
97
100
|
|
|
98
|
-
```
|
|
99
|
-
|
|
101
|
+
```cmd
|
|
102
|
+
npm run build
|
|
100
103
|
```
|
|
101
104
|
|
|
102
105
|
To run the example in the browser at [http://localhost:3000](http://localhost:3000).
|
|
103
106
|
|
|
104
|
-
```
|
|
105
|
-
|
|
107
|
+
```cmd
|
|
108
|
+
npm run web
|
|
106
109
|
```
|
|
107
110
|
|
|
108
111
|
To run JSON test vectors.
|
|
109
112
|
|
|
110
|
-
```
|
|
111
|
-
|
|
113
|
+
```cmd
|
|
114
|
+
npm start ./path/to/tests/*.json
|
|
112
115
|
```
|
package/build/debug-raw.d.ts
CHANGED
|
@@ -97,6 +97,13 @@ declare namespace __AdaptedExports {
|
|
|
97
97
|
* @returns `~lib/typedarray/Uint8Array`
|
|
98
98
|
*/
|
|
99
99
|
export function getPageDump(index: number): Uint8Array;
|
|
100
|
+
/**
|
|
101
|
+
* assembly/api-debugger/getMemory
|
|
102
|
+
* @param address `u32`
|
|
103
|
+
* @param length `u32`
|
|
104
|
+
* @returns `~lib/typedarray/Uint8Array`
|
|
105
|
+
*/
|
|
106
|
+
export function getMemory(address: number, length: number): Uint8Array;
|
|
100
107
|
/**
|
|
101
108
|
* assembly/api-debugger/setMemory
|
|
102
109
|
* @param address `u32`
|
package/build/debug-raw.js
CHANGED
|
@@ -109,6 +109,10 @@ export async function instantiate(module, imports = {}) {
|
|
|
109
109
|
// assembly/api-debugger/getPageDump(u32) => ~lib/typedarray/Uint8Array
|
|
110
110
|
return __liftTypedArray(Uint8Array, exports.getPageDump(index) >>> 0);
|
|
111
111
|
},
|
|
112
|
+
getMemory(address, length) {
|
|
113
|
+
// assembly/api-debugger/getMemory(u32, u32) => ~lib/typedarray/Uint8Array
|
|
114
|
+
return __liftTypedArray(Uint8Array, exports.getMemory(address, length) >>> 0);
|
|
115
|
+
},
|
|
112
116
|
setMemory(address, data) {
|
|
113
117
|
// assembly/api-debugger/setMemory(u32, ~lib/typedarray/Uint8Array) => void
|
|
114
118
|
data = __lowerTypedArray(Uint8Array, 10, 0, data) || __notnull();
|
package/build/debug-raw.wasm
CHANGED
|
Binary file
|
package/build/debug.d.ts
CHANGED
|
@@ -96,6 +96,13 @@ export declare function setRegisters(flatRegisters: Array<number>): void;
|
|
|
96
96
|
* @returns `~lib/typedarray/Uint8Array`
|
|
97
97
|
*/
|
|
98
98
|
export declare function getPageDump(index: number): Uint8Array;
|
|
99
|
+
/**
|
|
100
|
+
* assembly/api-debugger/getMemory
|
|
101
|
+
* @param address `u32`
|
|
102
|
+
* @param length `u32`
|
|
103
|
+
* @returns `~lib/typedarray/Uint8Array`
|
|
104
|
+
*/
|
|
105
|
+
export declare function getMemory(address: number, length: number): Uint8Array;
|
|
99
106
|
/**
|
|
100
107
|
* assembly/api-debugger/setMemory
|
|
101
108
|
* @param address `u32`
|
package/build/debug.js
CHANGED
|
@@ -109,6 +109,10 @@ async function instantiate(module, imports = {}) {
|
|
|
109
109
|
// assembly/api-debugger/getPageDump(u32) => ~lib/typedarray/Uint8Array
|
|
110
110
|
return __liftTypedArray(Uint8Array, exports.getPageDump(index) >>> 0);
|
|
111
111
|
},
|
|
112
|
+
getMemory(address, length) {
|
|
113
|
+
// assembly/api-debugger/getMemory(u32, u32) => ~lib/typedarray/Uint8Array
|
|
114
|
+
return __liftTypedArray(Uint8Array, exports.getMemory(address, length) >>> 0);
|
|
115
|
+
},
|
|
112
116
|
setMemory(address, data) {
|
|
113
117
|
// assembly/api-debugger/setMemory(u32, ~lib/typedarray/Uint8Array) => void
|
|
114
118
|
data = __lowerTypedArray(Uint8Array, 10, 0, data) || __notnull();
|
|
@@ -388,6 +392,7 @@ export const {
|
|
|
388
392
|
getRegisters,
|
|
389
393
|
setRegisters,
|
|
390
394
|
getPageDump,
|
|
395
|
+
getMemory,
|
|
391
396
|
setMemory,
|
|
392
397
|
InputKind,
|
|
393
398
|
HasMetadata,
|
package/build/debug.wasm
CHANGED
|
Binary file
|
package/build/release-mini.d.ts
CHANGED
|
@@ -102,6 +102,13 @@ export declare function setRegisters(flatRegisters: Array<number>): void;
|
|
|
102
102
|
* @returns `~lib/typedarray/Uint8Array`
|
|
103
103
|
*/
|
|
104
104
|
export declare function getPageDump(index: number): Uint8Array;
|
|
105
|
+
/**
|
|
106
|
+
* assembly/api-debugger/getMemory
|
|
107
|
+
* @param address `u32`
|
|
108
|
+
* @param length `u32`
|
|
109
|
+
* @returns `~lib/typedarray/Uint8Array`
|
|
110
|
+
*/
|
|
111
|
+
export declare function getMemory(address: number, length: number): Uint8Array;
|
|
105
112
|
/**
|
|
106
113
|
* assembly/api-debugger/setMemory
|
|
107
114
|
* @param address `u32`
|
package/build/release-mini.js
CHANGED
|
@@ -109,6 +109,10 @@ async function instantiate(module, imports = {}) {
|
|
|
109
109
|
// assembly/api-debugger/getPageDump(u32) => ~lib/typedarray/Uint8Array
|
|
110
110
|
return __liftTypedArray(Uint8Array, exports.getPageDump(index) >>> 0);
|
|
111
111
|
},
|
|
112
|
+
getMemory(address, length) {
|
|
113
|
+
// assembly/api-debugger/getMemory(u32, u32) => ~lib/typedarray/Uint8Array
|
|
114
|
+
return __liftTypedArray(Uint8Array, exports.getMemory(address, length) >>> 0);
|
|
115
|
+
},
|
|
112
116
|
setMemory(address, data) {
|
|
113
117
|
// assembly/api-debugger/setMemory(u32, ~lib/typedarray/Uint8Array) => void
|
|
114
118
|
data = __lowerTypedArray(Uint8Array, 10, 0, data) || __notnull();
|
|
@@ -393,6 +397,7 @@ export const {
|
|
|
393
397
|
getRegisters,
|
|
394
398
|
setRegisters,
|
|
395
399
|
getPageDump,
|
|
400
|
+
getMemory,
|
|
396
401
|
setMemory,
|
|
397
402
|
InputKind,
|
|
398
403
|
HasMetadata,
|
package/build/release-mini.wasm
CHANGED
|
Binary file
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/** Exported memory */
|
|
2
|
+
export declare const memory: WebAssembly.Memory;
|
|
3
|
+
// Exported runtime interface
|
|
4
|
+
export declare function __new(size: number, id: number): number;
|
|
5
|
+
export declare function __pin(ptr: number): number;
|
|
6
|
+
export declare function __unpin(ptr: number): void;
|
|
7
|
+
export declare function __collect(): void;
|
|
8
|
+
export declare const __rtti_base: number;
|
|
9
|
+
/**
|
|
10
|
+
* assembly/api-internal/getAssembly
|
|
11
|
+
* @param p `assembly/program/Program`
|
|
12
|
+
* @returns `~lib/string/String`
|
|
13
|
+
*/
|
|
14
|
+
export declare function getAssembly(p: __Internref26): string;
|
|
15
|
+
/**
|
|
16
|
+
* assembly/program-build/wrapAsProgram
|
|
17
|
+
* @param bytecode `~lib/typedarray/Uint8Array`
|
|
18
|
+
* @returns `~lib/typedarray/Uint8Array`
|
|
19
|
+
*/
|
|
20
|
+
export declare function wrapAsProgram(bytecode: Uint8Array): Uint8Array;
|
|
21
|
+
/**
|
|
22
|
+
* assembly/api-debugger/resetJAM
|
|
23
|
+
* @param program `~lib/array/Array<u8>`
|
|
24
|
+
* @param pc `f64`
|
|
25
|
+
* @param initialGas `i64`
|
|
26
|
+
* @param args `~lib/array/Array<u8>`
|
|
27
|
+
* @param hasMetadata `bool`
|
|
28
|
+
*/
|
|
29
|
+
export declare function resetJAM(program: Array<number>, pc: number, initialGas: bigint, args: Array<number>, hasMetadata?: boolean): void;
|
|
30
|
+
/**
|
|
31
|
+
* assembly/api-debugger/resetGeneric
|
|
32
|
+
* @param program `~lib/array/Array<u8>`
|
|
33
|
+
* @param flatRegisters `~lib/array/Array<u8>`
|
|
34
|
+
* @param initialGas `i64`
|
|
35
|
+
* @param hasMetadata `bool`
|
|
36
|
+
*/
|
|
37
|
+
export declare function resetGeneric(program: Array<number>, flatRegisters: Array<number>, initialGas: bigint, hasMetadata?: boolean): void;
|
|
38
|
+
/**
|
|
39
|
+
* assembly/api-debugger/resetGenericWithMemory
|
|
40
|
+
* @param program `~lib/array/Array<u8>`
|
|
41
|
+
* @param flatRegisters `~lib/array/Array<u8>`
|
|
42
|
+
* @param pageMap `~lib/typedarray/Uint8Array`
|
|
43
|
+
* @param chunks `~lib/typedarray/Uint8Array`
|
|
44
|
+
* @param initialGas `i64`
|
|
45
|
+
* @param hasMetadata `bool`
|
|
46
|
+
*/
|
|
47
|
+
export declare function resetGenericWithMemory(program: Array<number>, flatRegisters: Array<number>, pageMap: Uint8Array, chunks: Uint8Array, initialGas: bigint, hasMetadata?: boolean): void;
|
|
48
|
+
/**
|
|
49
|
+
* assembly/api-debugger/nextStep
|
|
50
|
+
* @returns `bool`
|
|
51
|
+
*/
|
|
52
|
+
export declare function nextStep(): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* assembly/api-debugger/nSteps
|
|
55
|
+
* @param steps `u32`
|
|
56
|
+
* @returns `bool`
|
|
57
|
+
*/
|
|
58
|
+
export declare function nSteps(steps: number): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* assembly/api-debugger/getProgramCounter
|
|
61
|
+
* @returns `u32`
|
|
62
|
+
*/
|
|
63
|
+
export declare function getProgramCounter(): number;
|
|
64
|
+
/**
|
|
65
|
+
* assembly/api-debugger/setNextProgramCounter
|
|
66
|
+
* @param pc `u32`
|
|
67
|
+
*/
|
|
68
|
+
export declare function setNextProgramCounter(pc: number): void;
|
|
69
|
+
/**
|
|
70
|
+
* assembly/api-debugger/getStatus
|
|
71
|
+
* @returns `u8`
|
|
72
|
+
*/
|
|
73
|
+
export declare function getStatus(): number;
|
|
74
|
+
/**
|
|
75
|
+
* assembly/api-debugger/getExitArg
|
|
76
|
+
* @returns `u32`
|
|
77
|
+
*/
|
|
78
|
+
export declare function getExitArg(): number;
|
|
79
|
+
/**
|
|
80
|
+
* assembly/api-debugger/getGasLeft
|
|
81
|
+
* @returns `i64`
|
|
82
|
+
*/
|
|
83
|
+
export declare function getGasLeft(): bigint;
|
|
84
|
+
/**
|
|
85
|
+
* assembly/api-debugger/setGasLeft
|
|
86
|
+
* @param gas `i64`
|
|
87
|
+
*/
|
|
88
|
+
export declare function setGasLeft(gas: bigint): void;
|
|
89
|
+
/**
|
|
90
|
+
* assembly/api-debugger/getRegisters
|
|
91
|
+
* @returns `~lib/typedarray/Uint8Array`
|
|
92
|
+
*/
|
|
93
|
+
export declare function getRegisters(): Uint8Array;
|
|
94
|
+
/**
|
|
95
|
+
* assembly/api-debugger/setRegisters
|
|
96
|
+
* @param flatRegisters `~lib/array/Array<u8>`
|
|
97
|
+
*/
|
|
98
|
+
export declare function setRegisters(flatRegisters: Array<number>): void;
|
|
99
|
+
/**
|
|
100
|
+
* assembly/api-debugger/getPageDump
|
|
101
|
+
* @param index `u32`
|
|
102
|
+
* @returns `~lib/typedarray/Uint8Array`
|
|
103
|
+
*/
|
|
104
|
+
export declare function getPageDump(index: number): Uint8Array;
|
|
105
|
+
/**
|
|
106
|
+
* assembly/api-debugger/getMemory
|
|
107
|
+
* @param address `u32`
|
|
108
|
+
* @param length `u32`
|
|
109
|
+
* @returns `~lib/typedarray/Uint8Array`
|
|
110
|
+
*/
|
|
111
|
+
export declare function getMemory(address: number, length: number): Uint8Array;
|
|
112
|
+
/**
|
|
113
|
+
* assembly/api-debugger/setMemory
|
|
114
|
+
* @param address `u32`
|
|
115
|
+
* @param data `~lib/typedarray/Uint8Array`
|
|
116
|
+
*/
|
|
117
|
+
export declare function setMemory(address: number, data: Uint8Array): void;
|
|
118
|
+
/** assembly/api-utils/InputKind */
|
|
119
|
+
export declare enum InputKind {
|
|
120
|
+
/** @type `i32` */
|
|
121
|
+
Generic,
|
|
122
|
+
/** @type `i32` */
|
|
123
|
+
SPI,
|
|
124
|
+
}
|
|
125
|
+
/** assembly/api-utils/HasMetadata */
|
|
126
|
+
export declare enum HasMetadata {
|
|
127
|
+
/** @type `i32` */
|
|
128
|
+
Yes,
|
|
129
|
+
/** @type `i32` */
|
|
130
|
+
No,
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* assembly/api-utils/getGasCosts
|
|
134
|
+
* @param input `~lib/array/Array<u8>`
|
|
135
|
+
* @param kind `i32`
|
|
136
|
+
* @param withMetadata `i32`
|
|
137
|
+
* @returns `~lib/array/Array<assembly/gas-costs/BlockGasCost>`
|
|
138
|
+
*/
|
|
139
|
+
export declare function getGasCosts(input: Array<number>, kind: number, withMetadata: number): Array<__Record50<never>>;
|
|
140
|
+
/**
|
|
141
|
+
* assembly/api-utils/disassemble
|
|
142
|
+
* @param input `~lib/array/Array<u8>`
|
|
143
|
+
* @param kind `i32`
|
|
144
|
+
* @param withMetadata `i32`
|
|
145
|
+
* @returns `~lib/string/String`
|
|
146
|
+
*/
|
|
147
|
+
export declare function disassemble(input: Array<number>, kind: number, withMetadata: number): string;
|
|
148
|
+
/**
|
|
149
|
+
* assembly/api-utils/prepareProgram
|
|
150
|
+
* @param kind `i32`
|
|
151
|
+
* @param hasMetadata `i32`
|
|
152
|
+
* @param program `~lib/array/Array<u8>`
|
|
153
|
+
* @param initialRegisters `~lib/array/Array<u64>`
|
|
154
|
+
* @param initialPageMap `~lib/array/Array<assembly/api-internal/InitialPage>`
|
|
155
|
+
* @param initialMemory `~lib/array/Array<assembly/api-internal/InitialChunk>`
|
|
156
|
+
* @param args `~lib/array/Array<u8>`
|
|
157
|
+
* @returns `assembly/spi/StandardProgram`
|
|
158
|
+
*/
|
|
159
|
+
export declare function prepareProgram(kind: number, hasMetadata: number, program: Array<number>, initialRegisters: Array<bigint>, initialPageMap: Array<__Record46<undefined>>, initialMemory: Array<__Record48<undefined>>, args: Array<number>): __Internref42;
|
|
160
|
+
/**
|
|
161
|
+
* assembly/api-utils/runProgram
|
|
162
|
+
* @param program `assembly/spi/StandardProgram`
|
|
163
|
+
* @param initialGas `i64`
|
|
164
|
+
* @param programCounter `u32`
|
|
165
|
+
* @param logs `bool`
|
|
166
|
+
* @param useSbrkGas `bool`
|
|
167
|
+
* @returns `assembly/api-internal/VmOutput`
|
|
168
|
+
*/
|
|
169
|
+
export declare function runProgram(program: __Internref42, initialGas?: bigint, programCounter?: number, logs?: boolean, useSbrkGas?: boolean): __Record55<never>;
|
|
170
|
+
/** assembly/program/Program */
|
|
171
|
+
declare class __Internref26 extends Number {
|
|
172
|
+
private __nominal26: symbol;
|
|
173
|
+
private __nominal0: symbol;
|
|
174
|
+
}
|
|
175
|
+
/** assembly/gas-costs/BlockGasCost */
|
|
176
|
+
declare interface __Record50<TOmittable> {
|
|
177
|
+
/** @type `u32` */
|
|
178
|
+
pc: number | TOmittable;
|
|
179
|
+
/** @type `u64` */
|
|
180
|
+
gas: bigint | TOmittable;
|
|
181
|
+
}
|
|
182
|
+
/** assembly/api-internal/InitialPage */
|
|
183
|
+
declare interface __Record46<TOmittable> {
|
|
184
|
+
/** @type `u32` */
|
|
185
|
+
address: number | TOmittable;
|
|
186
|
+
/** @type `u32` */
|
|
187
|
+
length: number | TOmittable;
|
|
188
|
+
/** @type `i32` */
|
|
189
|
+
access: number | TOmittable;
|
|
190
|
+
}
|
|
191
|
+
/** assembly/api-internal/InitialChunk */
|
|
192
|
+
declare interface __Record48<TOmittable> {
|
|
193
|
+
/** @type `u32` */
|
|
194
|
+
address: number | TOmittable;
|
|
195
|
+
/** @type `~lib/array/Array<u8>` */
|
|
196
|
+
data: Array<number>;
|
|
197
|
+
}
|
|
198
|
+
/** assembly/spi/StandardProgram */
|
|
199
|
+
declare class __Internref42 extends Number {
|
|
200
|
+
private __nominal42: symbol;
|
|
201
|
+
private __nominal0: symbol;
|
|
202
|
+
}
|
|
203
|
+
/** assembly/api-internal/VmOutput */
|
|
204
|
+
declare interface __Record55<TOmittable> {
|
|
205
|
+
/** @type `i32` */
|
|
206
|
+
status: number | TOmittable;
|
|
207
|
+
/** @type `~lib/array/Array<u64>` */
|
|
208
|
+
registers: Array<bigint>;
|
|
209
|
+
/** @type `u32` */
|
|
210
|
+
pc: number | TOmittable;
|
|
211
|
+
/** @type `~lib/array/Array<assembly/api-internal/InitialChunk>` */
|
|
212
|
+
memory: Array<__Record48<never>>;
|
|
213
|
+
/** @type `i64` */
|
|
214
|
+
gas: bigint | TOmittable;
|
|
215
|
+
/** @type `u32` */
|
|
216
|
+
exitCode: number | TOmittable;
|
|
217
|
+
}
|
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
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
|
+
getMemory(address, length) {
|
|
113
|
+
// assembly/api-debugger/getMemory(u32, u32) => ~lib/typedarray/Uint8Array
|
|
114
|
+
return __liftTypedArray(Uint8Array, exports.getMemory(address, length) >>> 0);
|
|
115
|
+
},
|
|
116
|
+
setMemory(address, data) {
|
|
117
|
+
// assembly/api-debugger/setMemory(u32, ~lib/typedarray/Uint8Array) => void
|
|
118
|
+
data = __lowerTypedArray(Uint8Array, 10, 0, data) || __notnull();
|
|
119
|
+
exports.setMemory(address, data);
|
|
120
|
+
},
|
|
121
|
+
InputKind: (values => (
|
|
122
|
+
// assembly/api-utils/InputKind
|
|
123
|
+
values[values.Generic = exports["InputKind.Generic"].valueOf()] = "Generic",
|
|
124
|
+
values[values.SPI = exports["InputKind.SPI"].valueOf()] = "SPI",
|
|
125
|
+
values
|
|
126
|
+
))({}),
|
|
127
|
+
HasMetadata: (values => (
|
|
128
|
+
// assembly/api-utils/HasMetadata
|
|
129
|
+
values[values.Yes = exports["HasMetadata.Yes"].valueOf()] = "Yes",
|
|
130
|
+
values[values.No = exports["HasMetadata.No"].valueOf()] = "No",
|
|
131
|
+
values
|
|
132
|
+
))({}),
|
|
133
|
+
getGasCosts(input, kind, withMetadata) {
|
|
134
|
+
// assembly/api-utils/getGasCosts(~lib/array/Array<u8>, i32, i32) => ~lib/array/Array<assembly/gas-costs/BlockGasCost>
|
|
135
|
+
input = __lowerArray(__setU8, 6, 0, input) || __notnull();
|
|
136
|
+
return __liftArray(pointer => __liftRecord50(__getU32(pointer)), 2, exports.getGasCosts(input, kind, withMetadata) >>> 0);
|
|
137
|
+
},
|
|
138
|
+
disassemble(input, kind, withMetadata) {
|
|
139
|
+
// assembly/api-utils/disassemble(~lib/array/Array<u8>, i32, i32) => ~lib/string/String
|
|
140
|
+
input = __lowerArray(__setU8, 6, 0, input) || __notnull();
|
|
141
|
+
return __liftString(exports.disassemble(input, kind, withMetadata) >>> 0);
|
|
142
|
+
},
|
|
143
|
+
prepareProgram(kind, hasMetadata, program, initialRegisters, initialPageMap, initialMemory, args) {
|
|
144
|
+
// 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
|
|
145
|
+
program = __retain(__lowerArray(__setU8, 6, 0, program) || __notnull());
|
|
146
|
+
initialRegisters = __retain(__lowerArray(__setU64, 52, 3, initialRegisters) || __notnull());
|
|
147
|
+
initialPageMap = __retain(__lowerArray((pointer, value) => { __setU32(pointer, __lowerRecord46(value) || __notnull()); }, 47, 2, initialPageMap) || __notnull());
|
|
148
|
+
initialMemory = __retain(__lowerArray((pointer, value) => { __setU32(pointer, __lowerRecord48(value) || __notnull()); }, 49, 2, initialMemory) || __notnull());
|
|
149
|
+
args = __lowerArray(__setU8, 6, 0, args) || __notnull();
|
|
150
|
+
try {
|
|
151
|
+
return __liftInternref(exports.prepareProgram(kind, hasMetadata, program, initialRegisters, initialPageMap, initialMemory, args) >>> 0);
|
|
152
|
+
} finally {
|
|
153
|
+
__release(program);
|
|
154
|
+
__release(initialRegisters);
|
|
155
|
+
__release(initialPageMap);
|
|
156
|
+
__release(initialMemory);
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
runProgram(program, initialGas, programCounter, logs, useSbrkGas) {
|
|
160
|
+
// assembly/api-utils/runProgram(assembly/spi/StandardProgram, i64?, u32?, bool?, bool?) => assembly/api-internal/VmOutput
|
|
161
|
+
program = __lowerInternref(program) || __notnull();
|
|
162
|
+
initialGas = initialGas || 0n;
|
|
163
|
+
logs = logs ? 1 : 0;
|
|
164
|
+
useSbrkGas = useSbrkGas ? 1 : 0;
|
|
165
|
+
exports.__setArgumentsLength(arguments.length);
|
|
166
|
+
return __liftRecord55(exports.runProgram(program, initialGas, programCounter, logs, useSbrkGas) >>> 0);
|
|
167
|
+
},
|
|
168
|
+
}, exports);
|
|
169
|
+
function __liftRecord50(pointer) {
|
|
170
|
+
// assembly/gas-costs/BlockGasCost
|
|
171
|
+
// Hint: Opt-out from lifting as a record by providing an empty constructor
|
|
172
|
+
if (!pointer) return null;
|
|
173
|
+
return {
|
|
174
|
+
pc: __getU32(pointer + 0),
|
|
175
|
+
gas: __getU64(pointer + 8),
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
function __lowerRecord46(value) {
|
|
179
|
+
// assembly/api-internal/InitialPage
|
|
180
|
+
// Hint: Opt-out from lowering as a record by providing an empty constructor
|
|
181
|
+
if (value == null) return 0;
|
|
182
|
+
const pointer = exports.__pin(exports.__new(12, 46));
|
|
183
|
+
__setU32(pointer + 0, value.address);
|
|
184
|
+
__setU32(pointer + 4, value.length);
|
|
185
|
+
__setU32(pointer + 8, value.access);
|
|
186
|
+
exports.__unpin(pointer);
|
|
187
|
+
return pointer;
|
|
188
|
+
}
|
|
189
|
+
function __lowerRecord48(value) {
|
|
190
|
+
// assembly/api-internal/InitialChunk
|
|
191
|
+
// Hint: Opt-out from lowering as a record by providing an empty constructor
|
|
192
|
+
if (value == null) return 0;
|
|
193
|
+
const pointer = exports.__pin(exports.__new(8, 48));
|
|
194
|
+
__setU32(pointer + 0, value.address);
|
|
195
|
+
__setU32(pointer + 4, __lowerArray(__setU8, 6, 0, value.data) || __notnull());
|
|
196
|
+
exports.__unpin(pointer);
|
|
197
|
+
return pointer;
|
|
198
|
+
}
|
|
199
|
+
function __liftRecord48(pointer) {
|
|
200
|
+
// assembly/api-internal/InitialChunk
|
|
201
|
+
// Hint: Opt-out from lifting as a record by providing an empty constructor
|
|
202
|
+
if (!pointer) return null;
|
|
203
|
+
return {
|
|
204
|
+
address: __getU32(pointer + 0),
|
|
205
|
+
data: __liftArray(__getU8, 0, __getU32(pointer + 4)),
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
function __liftRecord55(pointer) {
|
|
209
|
+
// assembly/api-internal/VmOutput
|
|
210
|
+
// Hint: Opt-out from lifting as a record by providing an empty constructor
|
|
211
|
+
if (!pointer) return null;
|
|
212
|
+
return {
|
|
213
|
+
status: __getI32(pointer + 0),
|
|
214
|
+
registers: __liftArray(pointer => BigInt.asUintN(64, __getU64(pointer)), 3, __getU32(pointer + 4)),
|
|
215
|
+
pc: __getU32(pointer + 8),
|
|
216
|
+
memory: __liftArray(pointer => __liftRecord48(__getU32(pointer)), 2, __getU32(pointer + 12)),
|
|
217
|
+
gas: __getI64(pointer + 16),
|
|
218
|
+
exitCode: __getU32(pointer + 24),
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
function __liftString(pointer) {
|
|
222
|
+
if (!pointer) return null;
|
|
223
|
+
const
|
|
224
|
+
end = pointer + new Uint32Array(memory.buffer)[pointer - 4 >>> 2] >>> 1,
|
|
225
|
+
memoryU16 = new Uint16Array(memory.buffer);
|
|
226
|
+
let
|
|
227
|
+
start = pointer >>> 1,
|
|
228
|
+
string = "";
|
|
229
|
+
while (end - start > 1024) string += String.fromCharCode(...memoryU16.subarray(start, start += 1024));
|
|
230
|
+
return string + String.fromCharCode(...memoryU16.subarray(start, end));
|
|
231
|
+
}
|
|
232
|
+
function __liftArray(liftElement, align, pointer) {
|
|
233
|
+
if (!pointer) return null;
|
|
234
|
+
const
|
|
235
|
+
dataStart = __getU32(pointer + 4),
|
|
236
|
+
length = __dataview.getUint32(pointer + 12, true),
|
|
237
|
+
values = new Array(length);
|
|
238
|
+
for (let i = 0; i < length; ++i) values[i] = liftElement(dataStart + (i << align >>> 0));
|
|
239
|
+
return values;
|
|
240
|
+
}
|
|
241
|
+
function __lowerArray(lowerElement, id, align, values) {
|
|
242
|
+
if (values == null) return 0;
|
|
243
|
+
const
|
|
244
|
+
length = values.length,
|
|
245
|
+
buffer = exports.__pin(exports.__new(length << align, 1)) >>> 0,
|
|
246
|
+
header = exports.__pin(exports.__new(16, id)) >>> 0;
|
|
247
|
+
__setU32(header + 0, buffer);
|
|
248
|
+
__dataview.setUint32(header + 4, buffer, true);
|
|
249
|
+
__dataview.setUint32(header + 8, length << align, true);
|
|
250
|
+
__dataview.setUint32(header + 12, length, true);
|
|
251
|
+
for (let i = 0; i < length; ++i) lowerElement(buffer + (i << align >>> 0), values[i]);
|
|
252
|
+
exports.__unpin(buffer);
|
|
253
|
+
exports.__unpin(header);
|
|
254
|
+
return header;
|
|
255
|
+
}
|
|
256
|
+
function __liftTypedArray(constructor, pointer) {
|
|
257
|
+
if (!pointer) return null;
|
|
258
|
+
return new constructor(
|
|
259
|
+
memory.buffer,
|
|
260
|
+
__getU32(pointer + 4),
|
|
261
|
+
__dataview.getUint32(pointer + 8, true) / constructor.BYTES_PER_ELEMENT
|
|
262
|
+
).slice();
|
|
263
|
+
}
|
|
264
|
+
function __lowerTypedArray(constructor, id, align, values) {
|
|
265
|
+
if (values == null) return 0;
|
|
266
|
+
const
|
|
267
|
+
length = values.length,
|
|
268
|
+
buffer = exports.__pin(exports.__new(length << align, 1)) >>> 0,
|
|
269
|
+
header = exports.__new(12, id) >>> 0;
|
|
270
|
+
__setU32(header + 0, buffer);
|
|
271
|
+
__dataview.setUint32(header + 4, buffer, true);
|
|
272
|
+
__dataview.setUint32(header + 8, length << align, true);
|
|
273
|
+
new constructor(memory.buffer, buffer, length).set(values);
|
|
274
|
+
exports.__unpin(buffer);
|
|
275
|
+
return header;
|
|
276
|
+
}
|
|
277
|
+
class Internref extends Number {}
|
|
278
|
+
const registry = new FinalizationRegistry(__release);
|
|
279
|
+
function __liftInternref(pointer) {
|
|
280
|
+
if (!pointer) return null;
|
|
281
|
+
const sentinel = new Internref(__retain(pointer));
|
|
282
|
+
registry.register(sentinel, pointer);
|
|
283
|
+
return sentinel;
|
|
284
|
+
}
|
|
285
|
+
function __lowerInternref(value) {
|
|
286
|
+
if (value == null) return 0;
|
|
287
|
+
if (value instanceof Internref) return value.valueOf();
|
|
288
|
+
throw TypeError("internref expected");
|
|
289
|
+
}
|
|
290
|
+
const refcounts = new Map();
|
|
291
|
+
function __retain(pointer) {
|
|
292
|
+
if (pointer) {
|
|
293
|
+
const refcount = refcounts.get(pointer);
|
|
294
|
+
if (refcount) refcounts.set(pointer, refcount + 1);
|
|
295
|
+
else refcounts.set(exports.__pin(pointer), 1);
|
|
296
|
+
}
|
|
297
|
+
return pointer;
|
|
298
|
+
}
|
|
299
|
+
function __release(pointer) {
|
|
300
|
+
if (pointer) {
|
|
301
|
+
const refcount = refcounts.get(pointer);
|
|
302
|
+
if (refcount === 1) exports.__unpin(pointer), refcounts.delete(pointer);
|
|
303
|
+
else if (refcount) refcounts.set(pointer, refcount - 1);
|
|
304
|
+
else throw Error(`invalid refcount '${refcount}' for reference '${pointer}'`);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
function __notnull() {
|
|
308
|
+
throw TypeError("value must not be null");
|
|
309
|
+
}
|
|
310
|
+
let __dataview = new DataView(memory.buffer);
|
|
311
|
+
function __setU8(pointer, value) {
|
|
312
|
+
try {
|
|
313
|
+
__dataview.setUint8(pointer, value, true);
|
|
314
|
+
} catch {
|
|
315
|
+
__dataview = new DataView(memory.buffer);
|
|
316
|
+
__dataview.setUint8(pointer, value, true);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
function __setU32(pointer, value) {
|
|
320
|
+
try {
|
|
321
|
+
__dataview.setUint32(pointer, value, true);
|
|
322
|
+
} catch {
|
|
323
|
+
__dataview = new DataView(memory.buffer);
|
|
324
|
+
__dataview.setUint32(pointer, value, true);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
function __setU64(pointer, value) {
|
|
328
|
+
try {
|
|
329
|
+
__dataview.setBigUint64(pointer, value, true);
|
|
330
|
+
} catch {
|
|
331
|
+
__dataview = new DataView(memory.buffer);
|
|
332
|
+
__dataview.setBigUint64(pointer, value, true);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
function __getU8(pointer) {
|
|
336
|
+
try {
|
|
337
|
+
return __dataview.getUint8(pointer, true);
|
|
338
|
+
} catch {
|
|
339
|
+
__dataview = new DataView(memory.buffer);
|
|
340
|
+
return __dataview.getUint8(pointer, true);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
function __getI32(pointer) {
|
|
344
|
+
try {
|
|
345
|
+
return __dataview.getInt32(pointer, true);
|
|
346
|
+
} catch {
|
|
347
|
+
__dataview = new DataView(memory.buffer);
|
|
348
|
+
return __dataview.getInt32(pointer, true);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
function __getU32(pointer) {
|
|
352
|
+
try {
|
|
353
|
+
return __dataview.getUint32(pointer, true);
|
|
354
|
+
} catch {
|
|
355
|
+
__dataview = new DataView(memory.buffer);
|
|
356
|
+
return __dataview.getUint32(pointer, true);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
function __getI64(pointer) {
|
|
360
|
+
try {
|
|
361
|
+
return __dataview.getBigInt64(pointer, true);
|
|
362
|
+
} catch {
|
|
363
|
+
__dataview = new DataView(memory.buffer);
|
|
364
|
+
return __dataview.getBigInt64(pointer, true);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
function __getU64(pointer) {
|
|
368
|
+
try {
|
|
369
|
+
return __dataview.getBigUint64(pointer, true);
|
|
370
|
+
} catch {
|
|
371
|
+
__dataview = new DataView(memory.buffer);
|
|
372
|
+
return __dataview.getBigUint64(pointer, true);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
return adaptedExports;
|
|
376
|
+
}
|
|
377
|
+
export const {
|
|
378
|
+
memory,
|
|
379
|
+
__new,
|
|
380
|
+
__pin,
|
|
381
|
+
__unpin,
|
|
382
|
+
__collect,
|
|
383
|
+
__rtti_base,
|
|
384
|
+
getAssembly,
|
|
385
|
+
wrapAsProgram,
|
|
386
|
+
resetJAM,
|
|
387
|
+
resetGeneric,
|
|
388
|
+
resetGenericWithMemory,
|
|
389
|
+
nextStep,
|
|
390
|
+
nSteps,
|
|
391
|
+
getProgramCounter,
|
|
392
|
+
setNextProgramCounter,
|
|
393
|
+
getStatus,
|
|
394
|
+
getExitArg,
|
|
395
|
+
getGasLeft,
|
|
396
|
+
setGasLeft,
|
|
397
|
+
getRegisters,
|
|
398
|
+
setRegisters,
|
|
399
|
+
getPageDump,
|
|
400
|
+
getMemory,
|
|
401
|
+
setMemory,
|
|
402
|
+
InputKind,
|
|
403
|
+
HasMetadata,
|
|
404
|
+
getGasCosts,
|
|
405
|
+
disassemble,
|
|
406
|
+
prepareProgram,
|
|
407
|
+
runProgram,
|
|
408
|
+
} = await (async url => instantiate(
|
|
409
|
+
await (async () => {
|
|
410
|
+
const isNodeOrBun = typeof process != "undefined" && process.versions != null && (process.versions.node != null || process.versions.bun != null);
|
|
411
|
+
if (isNodeOrBun) { return globalThis.WebAssembly.compile(await (await import("node:fs/promises")).readFile(url)); }
|
|
412
|
+
else { return await globalThis.WebAssembly.compileStreaming(globalThis.fetch(url)); }
|
|
413
|
+
})(), {
|
|
414
|
+
}
|
|
415
|
+
))(new URL("release-stub.wasm", import.meta.url));
|
|
Binary file
|
package/build/release.d.ts
CHANGED
|
@@ -96,6 +96,13 @@ export declare function setRegisters(flatRegisters: Array<number>): void;
|
|
|
96
96
|
* @returns `~lib/typedarray/Uint8Array`
|
|
97
97
|
*/
|
|
98
98
|
export declare function getPageDump(index: number): Uint8Array;
|
|
99
|
+
/**
|
|
100
|
+
* assembly/api-debugger/getMemory
|
|
101
|
+
* @param address `u32`
|
|
102
|
+
* @param length `u32`
|
|
103
|
+
* @returns `~lib/typedarray/Uint8Array`
|
|
104
|
+
*/
|
|
105
|
+
export declare function getMemory(address: number, length: number): Uint8Array;
|
|
99
106
|
/**
|
|
100
107
|
* assembly/api-debugger/setMemory
|
|
101
108
|
* @param address `u32`
|
package/build/release.js
CHANGED
|
@@ -109,6 +109,10 @@ async function instantiate(module, imports = {}) {
|
|
|
109
109
|
// assembly/api-debugger/getPageDump(u32) => ~lib/typedarray/Uint8Array
|
|
110
110
|
return __liftTypedArray(Uint8Array, exports.getPageDump(index) >>> 0);
|
|
111
111
|
},
|
|
112
|
+
getMemory(address, length) {
|
|
113
|
+
// assembly/api-debugger/getMemory(u32, u32) => ~lib/typedarray/Uint8Array
|
|
114
|
+
return __liftTypedArray(Uint8Array, exports.getMemory(address, length) >>> 0);
|
|
115
|
+
},
|
|
112
116
|
setMemory(address, data) {
|
|
113
117
|
// assembly/api-debugger/setMemory(u32, ~lib/typedarray/Uint8Array) => void
|
|
114
118
|
data = __lowerTypedArray(Uint8Array, 10, 0, data) || __notnull();
|
|
@@ -388,6 +392,7 @@ export const {
|
|
|
388
392
|
getRegisters,
|
|
389
393
|
setRegisters,
|
|
390
394
|
getPageDump,
|
|
395
|
+
getMemory,
|
|
391
396
|
setMemory,
|
|
392
397
|
InputKind,
|
|
393
398
|
HasMetadata,
|
package/build/release.wasm
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluffylabs/anan-as",
|
|
3
3
|
"description": "AssemblyScript PVM interpreter.",
|
|
4
|
-
"version": "1.0.0-
|
|
5
|
-
"main": "./bin/index.
|
|
4
|
+
"version": "1.0.0-8651050",
|
|
5
|
+
"main": "./bin/index.ts",
|
|
6
6
|
"repository": {
|
|
7
7
|
"url": "https://github.com/tomusdrw/anan-as"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"asbuild": "npm run asbuild:debug && npm run asbuild:release
|
|
10
|
+
"asbuild": "npm run asbuild:debug && npm run asbuild:release",
|
|
11
|
+
"asbuild:all": "npm run asbuild:debug && npm run asbuild:release && npm run asbuild:raw && npm run asbuild:release-mini && npm run asbuild:release-stub",
|
|
11
12
|
"asbuild:debug": "asc assembly/index.ts --target debug",
|
|
12
13
|
"asbuild:release": "asc assembly/index.ts --uncheckedBehavior=always --target release",
|
|
13
14
|
"asbuild:release-mini": "asc assembly/index.ts --uncheckedBehavior=always --target release-mini",
|
|
15
|
+
"asbuild:release-stub": "asc assembly/index.ts --uncheckedBehavior=always --target release-stub",
|
|
14
16
|
"asbuild:raw": "asc assembly/index.ts --target raw",
|
|
15
17
|
"asbuild:test": "asc assembly/test-run.ts --target test",
|
|
16
|
-
"build": "npm run asbuild && npm run cp-build",
|
|
18
|
+
"build": "npm run asbuild:all && npm run asbuild:test && npm run tsbuild && npm run cp-build",
|
|
17
19
|
"cp-build": "rm -rf ./web/build; cp -r ./build ./web/",
|
|
18
20
|
"format": "biome format --write",
|
|
19
|
-
"fuzz": "
|
|
21
|
+
"fuzz": "tsx ./bin/fuzz.ts",
|
|
20
22
|
"lint": "biome lint --write; biome check --write",
|
|
21
23
|
"prestart": "npm run build",
|
|
22
24
|
"pretest:w3f": "npm run build",
|
|
@@ -24,11 +26,12 @@
|
|
|
24
26
|
"preweb": "npm run build",
|
|
25
27
|
"qa": "biome ci",
|
|
26
28
|
"qa-fix": "npm run format; npm run lint",
|
|
27
|
-
"start": "
|
|
28
|
-
"test": "npm run asbuild:test &&
|
|
29
|
-
"
|
|
30
|
-
"test:
|
|
31
|
-
"
|
|
29
|
+
"start": "tsx ./bin/index.ts",
|
|
30
|
+
"test": "npm run asbuild:test && tsx ./bin/test.ts",
|
|
31
|
+
"tsbuild": "tsc",
|
|
32
|
+
"test:w3f": "tsx ./bin/test-w3f.ts",
|
|
33
|
+
"test:gas-cost": "tsx ./bin/test-gas-cost.ts",
|
|
34
|
+
"update-version": "tsx ./web/bump-version.ts $GITHUB_SHA",
|
|
32
35
|
"web": "npx live-server ./web"
|
|
33
36
|
},
|
|
34
37
|
"type": "module",
|
|
@@ -37,7 +40,10 @@
|
|
|
37
40
|
"license": "MPL-2.0",
|
|
38
41
|
"devDependencies": {
|
|
39
42
|
"@biomejs/biome": "^2.2.6",
|
|
40
|
-
"
|
|
43
|
+
"@types/node": "^24.8.1",
|
|
44
|
+
"assemblyscript": "^0.28.8",
|
|
45
|
+
"tsx": "^4.20.6",
|
|
46
|
+
"typescript": "^5.9.3"
|
|
41
47
|
},
|
|
42
48
|
"files": [
|
|
43
49
|
"build/**/*.wasm",
|
|
@@ -63,6 +69,10 @@
|
|
|
63
69
|
"import": "./build/release-mini.js",
|
|
64
70
|
"types": "./build/release-mini.d.ts"
|
|
65
71
|
},
|
|
72
|
+
"./release-stub": {
|
|
73
|
+
"import": "./build/release-stub.js",
|
|
74
|
+
"types": "./build/release-stub.d.ts"
|
|
75
|
+
},
|
|
66
76
|
"./raw": {
|
|
67
77
|
"import": "./build/debug-raw.js",
|
|
68
78
|
"types": "./build/debug-raw.d.ts"
|