warpo 3.1.3 → 3.2.1

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.
Files changed (132) hide show
  1. package/assemblyscript/std/README.md +5 -0
  2. package/assemblyscript/std/assembly/array.ts +542 -0
  3. package/assemblyscript/std/assembly/arraybuffer.ts +72 -0
  4. package/assemblyscript/std/assembly/builtins.ts +2312 -0
  5. package/assemblyscript/std/assembly/compat.ts +2 -0
  6. package/assemblyscript/std/assembly/dataview.ts +144 -0
  7. package/assemblyscript/std/assembly/date.ts +383 -0
  8. package/assemblyscript/std/assembly/diagnostics.ts +11 -0
  9. package/assemblyscript/std/assembly/error.ts +39 -0
  10. package/assemblyscript/std/assembly/function.ts +44 -0
  11. package/assemblyscript/std/assembly/iterator.ts +24 -0
  12. package/assemblyscript/std/assembly/map.ts +304 -0
  13. package/assemblyscript/std/assembly/math.ts +3401 -0
  14. package/assemblyscript/std/assembly/memory.ts +110 -0
  15. package/assemblyscript/std/assembly/number.ts +388 -0
  16. package/assemblyscript/std/assembly/object.ts +30 -0
  17. package/assemblyscript/std/assembly/polyfills.ts +24 -0
  18. package/assemblyscript/std/assembly/process.ts +7 -0
  19. package/assemblyscript/std/assembly/promise.ts +172 -0
  20. package/assemblyscript/std/assembly/reference.ts +48 -0
  21. package/assemblyscript/std/assembly/regexp.ts +16 -0
  22. package/assemblyscript/std/assembly/rt/common.ts +79 -0
  23. package/assemblyscript/std/assembly/rt/index-incremental.ts +4 -0
  24. package/assemblyscript/std/assembly/rt/index-radical.ts +4 -0
  25. package/assemblyscript/std/assembly/rt/index.d.ts +37 -0
  26. package/assemblyscript/std/assembly/rt/itcms.ts +415 -0
  27. package/assemblyscript/std/assembly/rt/tcms.ts +276 -0
  28. package/assemblyscript/std/assembly/rt/tlsf.ts +564 -0
  29. package/assemblyscript/std/assembly/rt.ts +71 -0
  30. package/assemblyscript/std/assembly/set.ts +261 -0
  31. package/assemblyscript/std/assembly/shared/feature.ts +69 -0
  32. package/assemblyscript/std/assembly/shared/host.ts +12 -0
  33. package/assemblyscript/std/assembly/shared/runtime.ts +9 -0
  34. package/assemblyscript/std/assembly/shared/target.ts +9 -0
  35. package/assemblyscript/std/assembly/shared/tsconfig.json +9 -0
  36. package/assemblyscript/std/assembly/shared/typeinfo.ts +72 -0
  37. package/assemblyscript/std/assembly/staticarray.ts +446 -0
  38. package/assemblyscript/std/assembly/string.ts +892 -0
  39. package/assemblyscript/std/assembly/symbol.ts +61 -0
  40. package/assemblyscript/std/assembly/table.ts +15 -0
  41. package/assemblyscript/std/assembly/tsconfig.json +4 -0
  42. package/assemblyscript/std/assembly/tuple.ts +36 -0
  43. package/assemblyscript/std/assembly/typedarray.ts +2000 -0
  44. package/assemblyscript/std/assembly/uri.ts +17 -0
  45. package/assemblyscript/std/assembly/util/bytes.ts +90 -0
  46. package/assemblyscript/std/assembly/util/casemap.ts +264 -0
  47. package/assemblyscript/std/assembly/util/error.ts +54 -0
  48. package/assemblyscript/std/assembly/util/hash.ts +117 -0
  49. package/assemblyscript/std/assembly/util/math.ts +1922 -0
  50. package/assemblyscript/std/assembly/util/memory.ts +309 -0
  51. package/assemblyscript/std/assembly/util/number.ts +884 -0
  52. package/assemblyscript/std/assembly/util/sort.ts +282 -0
  53. package/assemblyscript/std/assembly/util/string.ts +1075 -0
  54. package/assemblyscript/std/assembly/util/uri.ts +251 -0
  55. package/assemblyscript/std/assembly/vector.ts +3 -0
  56. package/dist/common/leb128.d.ts +5 -0
  57. package/dist/common/leb128.js +17 -0
  58. package/dist/common/leb128.js.map +1 -0
  59. package/dist/debug_server/debugSession.d.ts +31 -1
  60. package/dist/debug_server/debugSession.js +477 -99
  61. package/dist/debug_server/debugSession.js.map +1 -1
  62. package/dist/debug_server/debugTrace.d.ts +2 -0
  63. package/dist/debug_server/debugTrace.js +38 -0
  64. package/dist/debug_server/debugTrace.js.map +1 -0
  65. package/dist/debug_server/debugger.d.ts +5 -1
  66. package/dist/debug_server/debuggerWasmModule.d.ts +9 -0
  67. package/dist/debug_server/debuggerWasmModule.js +182 -4
  68. package/dist/debug_server/debuggerWasmModule.js.map +1 -1
  69. package/dist/debug_server/nodeDebugger.d.ts +12 -1
  70. package/dist/debug_server/nodeDebugger.js +74 -28
  71. package/dist/debug_server/nodeDebugger.js.map +1 -1
  72. package/dist/debug_server/tests/debugSession.test.js +556 -22
  73. package/dist/debug_server/tests/debugSession.test.js.map +1 -1
  74. package/dist/debug_server/tests/testModule/debugger_breakpoint_validation.d.ts +1 -0
  75. package/dist/debug_server/tests/testModule/debugger_breakpoint_validation.js +12 -0
  76. package/dist/debug_server/tests/testModule/debugger_breakpoint_validation.js.map +1 -0
  77. package/dist/debug_server/tests/testModule/debugger_closure_stepping.d.ts +1 -0
  78. package/dist/debug_server/tests/testModule/debugger_closure_stepping.js +12 -0
  79. package/dist/debug_server/tests/testModule/debugger_closure_stepping.js.map +1 -0
  80. package/dist/debug_server/tests/testModule/debugger_function_closure.d.ts +1 -0
  81. package/dist/debug_server/tests/testModule/debugger_function_closure.js +24 -0
  82. package/dist/debug_server/tests/testModule/debugger_function_closure.js.map +1 -0
  83. package/dist/debug_server/tests/testModule/debugger_import.case.d.ts +1 -0
  84. package/dist/debug_server/tests/testModule/debugger_import.case.js +9 -0
  85. package/dist/debug_server/tests/testModule/debugger_import.case.js.map +1 -0
  86. package/dist/debug_server/tests/testModule/debugger_import.d.ts +1 -0
  87. package/dist/debug_server/tests/testModule/debugger_import.js +6 -0
  88. package/dist/debug_server/tests/testModule/debugger_import.js.map +1 -0
  89. package/dist/debug_server/tests/testModule/debugger_pause.d.ts +1 -0
  90. package/dist/debug_server/tests/testModule/debugger_pause.js +9 -0
  91. package/dist/debug_server/tests/testModule/debugger_pause.js.map +1 -0
  92. package/dist/debug_server/tests/testModule/debugger_std_array.d.ts +1 -0
  93. package/dist/debug_server/tests/testModule/debugger_std_array.js +6 -0
  94. package/dist/debug_server/tests/testModule/debugger_std_array.js.map +1 -0
  95. package/dist/debug_server/tests/testModule/debugger_stepping.d.ts +3 -0
  96. package/dist/debug_server/tests/testModule/debugger_stepping.js +28 -0
  97. package/dist/debug_server/tests/testModule/debugger_stepping.js.map +1 -0
  98. package/dist/debug_server/tests/testModule/debugger_string_stepping.d.ts +1 -0
  99. package/dist/debug_server/tests/testModule/debugger_string_stepping.js +9 -0
  100. package/dist/debug_server/tests/testModule/debugger_string_stepping.js.map +1 -0
  101. package/dist/debug_server/tests/testModule/debugger_typed_array.d.ts +1 -0
  102. package/dist/debug_server/tests/testModule/debugger_typed_array.js +52 -0
  103. package/dist/debug_server/tests/testModule/debugger_typed_array.js.map +1 -0
  104. package/dist/debug_server/tests/testModule/debugger_utf8_const_str.d.ts +1 -0
  105. package/dist/debug_server/tests/testModule/debugger_utf8_const_str.js +10 -0
  106. package/dist/debug_server/tests/testModule/debugger_utf8_const_str.js.map +1 -0
  107. package/dist/dwarf/dwarfParser.js +6 -13
  108. package/dist/dwarf/dwarfParser.js.map +1 -1
  109. package/dist/dwarf/functionDebugInfo.d.ts +3 -0
  110. package/dist/dwarf/functionDebugInfo.js +24 -0
  111. package/dist/dwarf/functionDebugInfo.js.map +1 -1
  112. package/package.json +7 -7
  113. package/warpo_extension/std/tsconfig.json +4 -0
  114. package/warpo_extension/std/warpo/ffi.ts +16 -0
  115. package/warpo_extension/std/warpo/test/comparison.ts +122 -0
  116. package/warpo_extension/std/warpo/test/env.ts +33 -0
  117. package/warpo_extension/std/warpo/test/expect.ts +101 -0
  118. package/warpo_extension/std/warpo/test/formatPrint.ts +99 -0
  119. package/warpo_extension/std/warpo/test/implement.ts +41 -0
  120. package/warpo_extension/std/warpo/test/index.d.ts +0 -0
  121. package/warpo_extension/std/warpo/test/index.ts +39 -0
  122. package/warpo_extension/std/warpo/test/mockInstrument.ts +26 -0
  123. package/warpo_extension/std/warpo/utf8/const_str.ts +17 -0
  124. package/warpo_extension/std/wasi_snapshot_preview1/LICENSE +202 -0
  125. package/warpo_extension/std/wasi_snapshot_preview1/README.md +1 -0
  126. package/warpo_extension/std/wasi_snapshot_preview1/bindings/wasi_snapshot_preview1.ts +1731 -0
  127. package/warpo_extension/std/wasi_snapshot_preview1/wasi_console.ts +96 -0
  128. package/warpo_extension/std/wasi_snapshot_preview1/wasi_crypto.ts +8 -0
  129. package/warpo_extension/std/wasi_snapshot_preview1/wasi_date.ts +13 -0
  130. package/warpo_extension/std/wasi_snapshot_preview1/wasi_internal.ts +119 -0
  131. package/warpo_extension/std/wasi_snapshot_preview1/wasi_performance.ts +11 -0
  132. package/warpo_extension/std/wasi_snapshot_preview1/wasi_process.ts +191 -0
@@ -0,0 +1,261 @@
1
+ /// <reference path="./rt/index.d.ts" />
2
+
3
+ import { HASH } from "./util/hash";
4
+
5
+ // A deterministic hash set based on CloseTable from https://github.com/jorendorff/dht
6
+
7
+ // @ts-ignore: decorator
8
+ @inline const INITIAL_CAPACITY = 4;
9
+
10
+ // @ts-ignore: decorator
11
+ @inline const FILL_FACTOR_N = 8;
12
+
13
+ // @ts-ignore: decorator
14
+ @inline const FILL_FACTOR_D = 3;
15
+
16
+ // @ts-ignore: decorator
17
+ @inline const FREE_FACTOR_N = 3;
18
+
19
+ // @ts-ignore: decorator
20
+ @inline const FREE_FACTOR_D = 4;
21
+
22
+ /** Structure of a set entry. */
23
+ @unmanaged class SetEntry<K> {
24
+ key: K;
25
+ taggedNext: usize; // LSB=1 indicates EMPTY
26
+ }
27
+
28
+ /** Empty bit. */
29
+ // @ts-ignore: decorator
30
+ @inline const EMPTY: usize = 1 << 0;
31
+
32
+ /** Size of a bucket. */
33
+ // @ts-ignore: decorator
34
+ @inline const BUCKET_SIZE = sizeof<usize>();
35
+
36
+ /** Computes the alignment of an entry. */
37
+ // @ts-ignore: decorator
38
+ @inline
39
+ function ENTRY_ALIGN<T>(): usize {
40
+ // can align to 4 instead of 8 if 32-bit and K is <= 32-bits
41
+ const align = (sizeof<T>() > sizeof<usize>() ? sizeof<T>() : sizeof<usize>()) - 1;
42
+ return align;
43
+ }
44
+
45
+ /** Computes the aligned size of an entry. */
46
+ // @ts-ignore: decorator
47
+ @inline
48
+ function ENTRY_SIZE<T>(): usize {
49
+ const align = ENTRY_ALIGN<T>();
50
+ const size = (offsetof<SetEntry<T>>() + align) & ~align;
51
+ return size;
52
+ }
53
+
54
+ // @ts-ignore: decorator
55
+ @lazy
56
+ const GET_START = Symbol();
57
+
58
+ // @ts-ignore: decorator
59
+ @lazy
60
+ const GET_ENTRIES_OFFSET = Symbol();
61
+
62
+ class SetIterator<T> implements Iterator<T> {
63
+ private i: i32 = 0;
64
+ constructor(private set: Set<T>) {}
65
+ next(): IteratorResult<T> {
66
+ const set = this.set;
67
+ const start = set[GET_START]();
68
+ const size = set[GET_ENTRIES_OFFSET]();
69
+ for (let i = this.i; i < size; ++i) {
70
+ let entry = changetype<SetEntry<T>>(start + <usize>i * ENTRY_SIZE<T>());
71
+ if (!(entry.taggedNext & EMPTY)) {
72
+ this.i = i + 1;
73
+ return IteratorResult.fromValue<T>(entry.key);
74
+ }
75
+ }
76
+ return IteratorResult.done<T>();
77
+ }
78
+ }
79
+
80
+ export class Set<T> implements Iterable<T> {
81
+ // buckets referencing their respective first entry, usize[bucketsMask + 1]
82
+ private buckets: ArrayBuffer = new ArrayBuffer(INITIAL_CAPACITY * <i32>BUCKET_SIZE);
83
+ private bucketsMask: u32 = INITIAL_CAPACITY - 1;
84
+
85
+ // entries in insertion order, SetEntry<K>[entriesCapacity]
86
+ private entries: ArrayBuffer = new ArrayBuffer(INITIAL_CAPACITY * <i32>ENTRY_SIZE<T>());
87
+ private entriesCapacity: i32 = INITIAL_CAPACITY;
88
+ private entriesOffset: i32 = 0;
89
+ private entriesCount: i32 = 0;
90
+
91
+ constructor() {
92
+ /* nop */
93
+ }
94
+
95
+ // we don't want to explore these fields but they are needed by iterator.
96
+ @inline
97
+ [GET_START](): usize {
98
+ return changetype<usize>(this.entries);
99
+ }
100
+ @inline
101
+ [GET_ENTRIES_OFFSET](): i32 {
102
+ return this.entriesOffset;
103
+ }
104
+
105
+ get size(): i32 {
106
+ return this.entriesCount;
107
+ }
108
+
109
+ clear(): void {
110
+ this.buckets = new ArrayBuffer(INITIAL_CAPACITY * <i32>BUCKET_SIZE);
111
+ this.bucketsMask = INITIAL_CAPACITY - 1;
112
+ this.entries = new ArrayBuffer(INITIAL_CAPACITY * <i32>ENTRY_SIZE<T>());
113
+ this.entriesCapacity = INITIAL_CAPACITY;
114
+ this.entriesOffset = 0;
115
+ this.entriesCount = 0;
116
+ }
117
+
118
+ private find(key: T, hashCode: u32): SetEntry<T> | null {
119
+ let entry = load<SetEntry<T>>(changetype<usize>(this.buckets) + <usize>(hashCode & this.bucketsMask) * BUCKET_SIZE); // unmanaged!
120
+ while (entry) {
121
+ let taggedNext = entry.taggedNext;
122
+ if (!(taggedNext & EMPTY) && entry.key == key) return entry;
123
+ entry = changetype<SetEntry<T>>(taggedNext & ~EMPTY);
124
+ }
125
+ return null;
126
+ }
127
+
128
+
129
+ @operator("[]")
130
+ has(key: T): bool {
131
+ return this.find(key, HASH<T>(key)) != null;
132
+ }
133
+
134
+ add(key: T): this {
135
+ let hashCode = HASH<T>(key);
136
+ let entry = this.find(key, hashCode); // unmanaged!
137
+ if (!entry) {
138
+ // check if rehashing is necessary
139
+ if (this.entriesOffset == this.entriesCapacity) {
140
+ this.rehash(
141
+ this.entriesCount < (this.entriesCapacity * FREE_FACTOR_N) / FREE_FACTOR_D
142
+ ? this.bucketsMask // just rehash if 1/4+ entries are empty
143
+ : (this.bucketsMask << 1) | 1 // grow capacity to next 2^N
144
+ );
145
+ }
146
+ // append new entry
147
+
148
+ entry = changetype<SetEntry<T>>(changetype<usize>(this.entries) + <usize>this.entriesOffset++ * ENTRY_SIZE<T>());
149
+ entry.key = key;
150
+ if (isManaged<T>()) {
151
+ __link(changetype<usize>(this), changetype<usize>(key), true);
152
+ }
153
+ ++this.entriesCount;
154
+ // link with previous entry in bucket
155
+ let bucketPtrBase = changetype<usize>(this.buckets) + <usize>(hashCode & this.bucketsMask) * BUCKET_SIZE;
156
+ entry.taggedNext = load<usize>(bucketPtrBase);
157
+ store<usize>(bucketPtrBase, changetype<usize>(entry));
158
+ }
159
+ return this;
160
+ }
161
+
162
+
163
+ @operator("[]=")
164
+ private __set(key: T, value: bool): void {
165
+ if (value) this.add(key);
166
+ else this.delete(key);
167
+ }
168
+
169
+ delete(key: T): bool {
170
+ let entry = this.find(key, HASH<T>(key)); // unmanaged!
171
+ if (!entry) return false;
172
+ entry.taggedNext |= EMPTY;
173
+ --this.entriesCount;
174
+ // check if rehashing is appropriate
175
+ let halfBucketsMask = this.bucketsMask >> 1;
176
+ if (
177
+ halfBucketsMask + 1 >= max<u32>(INITIAL_CAPACITY, this.entriesCount) &&
178
+ this.entriesCount < (this.entriesCapacity * FREE_FACTOR_N) / FREE_FACTOR_D
179
+ )
180
+ this.rehash(halfBucketsMask);
181
+ return true;
182
+ }
183
+
184
+ private rehash(newBucketsMask: u32): void {
185
+ let newBucketsCapacity = <i32>(newBucketsMask + 1);
186
+ let newBuckets = new ArrayBuffer(newBucketsCapacity * <i32>BUCKET_SIZE);
187
+ let newEntriesCapacity = (newBucketsCapacity * FILL_FACTOR_N) / FILL_FACTOR_D;
188
+ let newEntries = new ArrayBuffer(newEntriesCapacity * <i32>ENTRY_SIZE<T>());
189
+
190
+ // copy old entries to new entries
191
+ let oldPtr = changetype<usize>(this.entries);
192
+ let oldEnd = oldPtr + <usize>this.entriesOffset * ENTRY_SIZE<T>();
193
+ let newPtr = changetype<usize>(newEntries);
194
+ while (oldPtr != oldEnd) {
195
+ let oldEntry = changetype<SetEntry<T>>(oldPtr); // unmanaged!
196
+ if (!(oldEntry.taggedNext & EMPTY)) {
197
+ let newEntry = changetype<SetEntry<T>>(newPtr); // unmanaged!
198
+ let oldEntryKey = oldEntry.key;
199
+ newEntry.key = oldEntryKey;
200
+ let newBucketIndex = HASH<T>(oldEntryKey) & newBucketsMask;
201
+ let newBucketPtrBase = changetype<usize>(newBuckets) + <usize>newBucketIndex * BUCKET_SIZE;
202
+ newEntry.taggedNext = load<usize>(newBucketPtrBase);
203
+ store<usize>(newBucketPtrBase, newPtr);
204
+ newPtr += ENTRY_SIZE<T>();
205
+ }
206
+ oldPtr += ENTRY_SIZE<T>();
207
+ }
208
+
209
+ this.buckets = newBuckets;
210
+ this.bucketsMask = newBucketsMask;
211
+ this.entries = newEntries;
212
+ this.entriesCapacity = newEntriesCapacity;
213
+ this.entriesOffset = this.entriesCount;
214
+ }
215
+
216
+ [Symbol.iterator](): SetIterator<T> {
217
+ return new SetIterator<T>(this);
218
+ }
219
+
220
+ values(): T[] {
221
+ // FIXME: this is preliminary, needs iterators/closures
222
+ let start = changetype<usize>(this.entries);
223
+ let size = this.entriesOffset;
224
+ let values = new Array<T>(size);
225
+ let length = 0;
226
+ for (let i = 0; i < size; ++i) {
227
+ let entry = changetype<SetEntry<T>>(start + <usize>i * ENTRY_SIZE<T>());
228
+ if (!(entry.taggedNext & EMPTY)) {
229
+ unchecked((values[length++] = entry.key));
230
+ }
231
+ }
232
+ values.length = length;
233
+ return values;
234
+ }
235
+
236
+ toString(): string {
237
+ return "[object Set]";
238
+ }
239
+
240
+ // RT integration
241
+
242
+ @unsafe private __visit(cookie: u32): void {
243
+ __visit(changetype<usize>(this.buckets), cookie);
244
+ let entries = changetype<usize>(this.entries);
245
+ if (isManaged<T>()) {
246
+ let cur = entries;
247
+ let end = cur + <usize>this.entriesOffset * ENTRY_SIZE<T>();
248
+ while (cur < end) {
249
+ let entry = changetype<SetEntry<T>>(cur);
250
+ if (!(entry.taggedNext & EMPTY)) {
251
+ let val = changetype<usize>(entry.key);
252
+ if (isNullable<T>()) {
253
+ if (val) __visit(val, cookie);
254
+ } else __visit(val, cookie);
255
+ }
256
+ cur += ENTRY_SIZE<T>();
257
+ }
258
+ }
259
+ __visit(entries, cookie);
260
+ }
261
+ }
@@ -0,0 +1,69 @@
1
+ // This file is shared with the compiler and must remain portable
2
+
3
+ /** Indicates specific features to activate. */
4
+ export const enum Feature {
5
+ /** No additional features. */
6
+ None = 0,
7
+ /** Sign extension operations. */
8
+ SignExtension = 1 << 0, // see: https://github.com/WebAssembly/sign-extension-ops
9
+ /** Mutable global imports and exports. */
10
+ MutableGlobals = 1 << 1, // see: https://github.com/WebAssembly/mutable-global
11
+ /** Non-trapping float to integer operations. */
12
+ NontrappingF2I = 1 << 2, // see: https://github.com/WebAssembly/nontrapping-float-to-int-conversions
13
+ /** Bulk memory operations. */
14
+ BulkMemory = 1 << 3, // see: https://github.com/WebAssembly/bulk-memory-operations
15
+ /** SIMD types and operations. */
16
+ Simd = 1 << 4, // see: https://github.com/WebAssembly/simd
17
+ /** Exception handling operations. */
18
+ ExceptionHandling = 1 << 6, // see: https://github.com/WebAssembly/exception-handling
19
+ /** Tail call operations. */
20
+ TailCalls = 1 << 7, // see: https://github.com/WebAssembly/tail-call
21
+ /** Reference types. */
22
+ ReferenceTypes = 1 << 8, // see: https://github.com/WebAssembly/reference-types
23
+ /** Multi value types. */
24
+ MultiValue = 1 << 9, // see: https://github.com/WebAssembly/multi-value
25
+ /** Garbage collection. */
26
+ GC = 1 << 10, // see: https://github.com/WebAssembly/gc
27
+ /** Memory64. */
28
+ Memory64 = 1 << 11, // see: https://github.com/WebAssembly/memory64
29
+ /** Relaxed SIMD. */
30
+ RelaxedSimd = 1 << 12, // see: https://github.com/WebAssembly/relaxed-simd
31
+ /** Extended const expressions. */
32
+ ExtendedConst = 1 << 13, // see: https://github.com/WebAssembly/extended-const
33
+ /** All features. */
34
+ All = (1 << 15) - 1,
35
+ }
36
+
37
+ /** Gets the name of the specified feature one would specify on the command line. */
38
+ export function featureToString(feature: Feature): string {
39
+ switch (feature) {
40
+ case Feature.SignExtension:
41
+ return "sign-extension";
42
+ case Feature.MutableGlobals:
43
+ return "mutable-globals";
44
+ case Feature.NontrappingF2I:
45
+ return "nontrapping-f2i";
46
+ case Feature.BulkMemory:
47
+ return "bulk-memory";
48
+ case Feature.Simd:
49
+ return "simd";
50
+ case Feature.ExceptionHandling:
51
+ return "exception-handling";
52
+ case Feature.TailCalls:
53
+ return "tail-calls";
54
+ case Feature.ReferenceTypes:
55
+ return "reference-types";
56
+ case Feature.MultiValue:
57
+ return "multi-value";
58
+ case Feature.GC:
59
+ return "gc";
60
+ case Feature.Memory64:
61
+ return "memory64";
62
+ case Feature.RelaxedSimd:
63
+ return "relaxed-simd";
64
+ case Feature.ExtendedConst:
65
+ return "extended-const";
66
+ }
67
+ assert(false);
68
+ return "";
69
+ }
@@ -0,0 +1,12 @@
1
+ // Copyright (C) 2025 wasm-ecosystem
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ // This file is shared with the compiler and must remain portable
5
+
6
+ /** Host APIs. */
7
+ export enum Host {
8
+ /** No host APIs. */
9
+ None = 0,
10
+ /** WASI Snapshot Preview 1. */
11
+ WasiSnapshotPreview1 = 1,
12
+ }
@@ -0,0 +1,9 @@
1
+ // This file is shared with the compiler and must remain portable
2
+
3
+ /** Runtime types. */
4
+ export enum Runtime {
5
+ /** radical GC with stopping the world. */
6
+ Radical = 1,
7
+ /** incremental GC. */
8
+ Incremental = 2,
9
+ }
@@ -0,0 +1,9 @@
1
+ // This file is shared with the compiler and must remain portable
2
+
3
+ /** Compilation target. */
4
+ export enum Target {
5
+ /** Portable. */
6
+ Js = 0,
7
+ /** WebAssembly with 32-bit pointers. */
8
+ Wasm32 = 1,
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "../../../../types/tsconfig-std.json",
3
+ "compilerOptions": {
4
+ "outDir": "../../../out",
5
+ "allowJs": false,
6
+ "sourceMap": true
7
+ },
8
+ "include": ["./**/*.ts"]
9
+ }
@@ -0,0 +1,72 @@
1
+ // This file is shared with the compiler and must remain portable
2
+
3
+ // ╒═══════════════════ Typeinfo interpretation ═══════════════════╕
4
+ // 3 2 1
5
+ // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits
6
+ // ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤ ◄─ __rtti_base
7
+ // │ count │
8
+ // ╞═══════════════════════════════════════════════════════════════╡ ┐
9
+ // │ Typeinfo#flags [id=0] │ id < count
10
+ // ├───────────────────────────────────────────────────────────────┤
11
+ // │ ... │
12
+
13
+ /** Runtime type information data structure. */
14
+ @unmanaged
15
+ export class Typeinfo {
16
+ /** Flags describing the shape of this class type. */
17
+ flags: TypeinfoFlags = TypeinfoFlags.NONE;
18
+ }
19
+
20
+ /** Runtime type information flags. */
21
+ export const enum TypeinfoFlags {
22
+ /** No specific flags. */
23
+ NONE = 0,
24
+ /** Type is an `ArrayBufferView`. */
25
+ ARRAYBUFFERVIEW = 1 << 0,
26
+ /** Type is an `Array`. */
27
+ ARRAY = 1 << 1,
28
+ /** Type is a `StaticArray`. */
29
+ STATICARRAY = 1 << 2,
30
+ /** Type is a `Set`. */
31
+ SET = 1 << 3,
32
+ /** Type is a `Map`. */
33
+ MAP = 1 << 4,
34
+ /** Type has no outgoing pointers. */
35
+ POINTERFREE = 1 << 5,
36
+ /** Value alignment of 1 byte. */
37
+ VALUE_ALIGN_0 = 1 << 6,
38
+ /** Value alignment of 2 bytes. */
39
+ VALUE_ALIGN_1 = 1 << 7,
40
+ /** Value alignment of 4 bytes. */
41
+ VALUE_ALIGN_2 = 1 << 8,
42
+ /** Value alignment of 8 bytes. */
43
+ VALUE_ALIGN_3 = 1 << 9,
44
+ /** Value alignment of 16 bytes. */
45
+ VALUE_ALIGN_4 = 1 << 10,
46
+ /** Value is a signed type. */
47
+ VALUE_SIGNED = 1 << 11,
48
+ /** Value is a float type. */
49
+ VALUE_FLOAT = 1 << 12,
50
+ /** Value type is nullable. */
51
+ VALUE_NULLABLE = 1 << 13,
52
+ /** Value type is managed. */
53
+ VALUE_MANAGED = 1 << 14,
54
+ /** Key alignment of 1 byte. */
55
+ KEY_ALIGN_0 = 1 << 15,
56
+ /** Key alignment of 2 bytes. */
57
+ KEY_ALIGN_1 = 1 << 16,
58
+ /** Key alignment of 4 bytes. */
59
+ KEY_ALIGN_2 = 1 << 17,
60
+ /** Key alignment of 8 bytes. */
61
+ KEY_ALIGN_3 = 1 << 18,
62
+ /** Key alignment of 16 bytes. */
63
+ KEY_ALIGN_4 = 1 << 19,
64
+ /** Key is a signed type. */
65
+ KEY_SIGNED = 1 << 20,
66
+ /** Key is a float type. */
67
+ KEY_FLOAT = 1 << 21,
68
+ /** Key type is nullable. */
69
+ KEY_NULLABLE = 1 << 22,
70
+ /** Key type is managed. */
71
+ KEY_MANAGED = 1 << 23,
72
+ }