toilscript 0.0.1 → 0.1.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.
- package/LICENSE +201 -201
- package/NOTICE +94 -94
- package/README.md +101 -114
- package/bin/asc.js +0 -0
- package/bin/asinit.js +6 -6
- package/dist/asc.generated.d.ts +10027 -0
- package/dist/asc.js +24474 -0
- package/dist/asc.js.map +7 -0
- package/dist/importmap.json +9 -0
- package/dist/toilscript.generated.d.ts +11242 -0
- package/dist/toilscript.js +337 -0
- package/dist/toilscript.js.map +7 -0
- package/dist/web.js +22 -0
- package/lib/binaryen.d.ts +2 -2
- package/lib/binaryen.js +2 -2
- package/package.json +115 -114
- package/std/README.md +6 -6
- package/std/assembly/array.ts +550 -550
- package/std/assembly/arraybuffer.ts +77 -77
- package/std/assembly/atomics.ts +127 -127
- package/std/assembly/bindings/asyncify.ts +16 -16
- package/std/assembly/bindings/dom.ts +291 -291
- package/std/assembly/bindings/node.ts +6 -6
- package/std/assembly/bitflags.ts +53 -53
- package/std/assembly/builtins.ts +2650 -2650
- package/std/assembly/byteslice.ts +177 -177
- package/std/assembly/compat.ts +2 -2
- package/std/assembly/console.ts +42 -42
- package/std/assembly/crypto.ts +9 -9
- package/std/assembly/dataview.ts +181 -181
- package/std/assembly/date.ts +375 -375
- package/std/assembly/diagnostics.ts +11 -11
- package/std/assembly/encoding.ts +151 -151
- package/std/assembly/endian.ts +45 -45
- package/std/assembly/error.ts +44 -44
- package/std/assembly/fixedarray.ts +173 -173
- package/std/assembly/fixedmap.ts +326 -326
- package/std/assembly/fixedset.ts +275 -275
- package/std/assembly/function.ts +42 -42
- package/std/assembly/index.d.ts +2892 -2891
- package/std/assembly/iterator.ts +35 -35
- package/std/assembly/map.ts +269 -269
- package/std/assembly/math.ts +3289 -3289
- package/std/assembly/memory.ts +123 -123
- package/std/assembly/number.ts +388 -388
- package/std/assembly/object.ts +36 -36
- package/std/assembly/performance.ts +9 -9
- package/std/assembly/pointer.ts +80 -80
- package/std/assembly/polyfills.ts +27 -27
- package/std/assembly/process.ts +50 -50
- package/std/assembly/reference.ts +48 -48
- package/std/assembly/regexp.ts +12 -12
- package/std/assembly/rt/README.md +83 -83
- package/std/assembly/rt/common.ts +81 -81
- package/std/assembly/rt/index-incremental.ts +2 -2
- package/std/assembly/rt/index-memory.ts +1 -1
- package/std/assembly/rt/index-minimal.ts +2 -2
- package/std/assembly/rt/index-stub.ts +1 -1
- package/std/assembly/rt/index.d.ts +37 -37
- package/std/assembly/rt/itcms.ts +419 -419
- package/std/assembly/rt/memory-runtime.ts +94 -94
- package/std/assembly/rt/rtrace.ts +15 -15
- package/std/assembly/rt/stub.ts +133 -133
- package/std/assembly/rt/tcms.ts +254 -254
- package/std/assembly/rt/tlsf.ts +592 -592
- package/std/assembly/rt.ts +90 -90
- package/std/assembly/set.ts +225 -225
- package/std/assembly/shared/feature.ts +68 -68
- package/std/assembly/shared/runtime.ts +13 -13
- package/std/assembly/shared/target.ts +11 -11
- package/std/assembly/shared/tsconfig.json +11 -11
- package/std/assembly/shared/typeinfo.ts +72 -72
- package/std/assembly/staticarray.ts +423 -423
- package/std/assembly/string.ts +850 -850
- package/std/assembly/symbol.ts +114 -114
- package/std/assembly/table.ts +16 -16
- package/std/assembly/toilscript.ts +16 -0
- package/std/assembly/tsconfig.json +6 -6
- package/std/assembly/typedarray.ts +1954 -1954
- package/std/assembly/uri.ts +17 -17
- package/std/assembly/util/bytes.ts +107 -107
- package/std/assembly/util/casemap.ts +497 -497
- package/std/assembly/util/error.ts +58 -58
- package/std/assembly/util/hash.ts +117 -117
- package/std/assembly/util/math.ts +1922 -1922
- package/std/assembly/util/memory.ts +290 -290
- package/std/assembly/util/number.ts +873 -873
- package/std/assembly/util/sort.ts +313 -313
- package/std/assembly/util/string.ts +1202 -1202
- package/std/assembly/util/uri.ts +275 -275
- package/std/assembly/vector.ts +4 -4
- package/std/assembly.json +16 -16
- package/std/portable/index.d.ts +461 -461
- package/std/portable/index.js +416 -416
- package/std/portable.json +11 -11
- package/std/types/assembly/index.d.ts +1 -1
- package/std/types/assembly/package.json +2 -2
- package/std/types/portable/index.d.ts +1 -1
- package/std/types/portable/package.json +2 -2
- package/tsconfig-base.json +13 -13
- package/util/README.md +23 -23
- package/util/browser/fs.js +1 -1
- package/util/browser/module.js +5 -5
- package/util/browser/path.js +520 -520
- package/util/browser/process.js +59 -59
- package/util/browser/url.js +23 -23
- package/util/cpu.d.ts +9 -9
- package/util/cpu.js +42 -42
- package/util/find.d.ts +6 -6
- package/util/find.js +20 -20
- package/util/node.d.ts +21 -21
- package/util/node.js +34 -34
- package/util/options.d.ts +70 -70
- package/util/options.js +262 -262
- package/util/terminal.d.ts +52 -52
- package/util/terminal.js +35 -35
- package/util/text.d.ts +26 -26
- package/util/text.js +114 -114
- package/util/tsconfig.json +9 -9
- package/util/web.d.ts +11 -11
- package/util/web.js +33 -33
|
@@ -1,177 +1,177 @@
|
|
|
1
|
-
/// <reference path="./rt/index.d.ts" />
|
|
2
|
-
|
|
3
|
-
import { Pointer } from "./pointer";
|
|
4
|
-
import { E_INDEXOUTOFRANGE, E_INVALIDLENGTH } from "./util/error";
|
|
5
|
-
|
|
6
|
-
// Zero-alloc memory view: pointer + length with bounds-checked endian-aware reads/writes.
|
|
7
|
-
// Unlike DataView, does not own an ArrayBuffer — the viewed memory is unowned/raw.
|
|
8
|
-
|
|
9
|
-
@final
|
|
10
|
-
export class ByteSlice {
|
|
11
|
-
readonly ptr: usize;
|
|
12
|
-
readonly length: i32;
|
|
13
|
-
|
|
14
|
-
constructor(ptr: usize, length: i32) {
|
|
15
|
-
if (length < 0) throw new RangeError(E_INVALIDLENGTH);
|
|
16
|
-
this.ptr = ptr;
|
|
17
|
-
this.length = length;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// --- Unsigned reads ---
|
|
21
|
-
|
|
22
|
-
@inline getU8(offset: i32): u8 {
|
|
23
|
-
if (<u32>offset >= <u32>this.length) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
24
|
-
return load<u8>(this.ptr + <usize>offset);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
@inline getU16(offset: i32, be: bool = true): u16 {
|
|
28
|
-
if ((offset >>> 31) | i32(offset + 2 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
29
|
-
let v = load<u16>(this.ptr + <usize>offset);
|
|
30
|
-
return be ? bswap<u16>(v) : v;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
@inline getU32(offset: i32, be: bool = true): u32 {
|
|
34
|
-
if ((offset >>> 31) | i32(offset + 4 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
35
|
-
let v = load<u32>(this.ptr + <usize>offset);
|
|
36
|
-
return be ? bswap<u32>(v) : v;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
@inline getU64(offset: i32, be: bool = true): u64 {
|
|
40
|
-
if ((offset >>> 31) | i32(offset + 8 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
41
|
-
let v = load<u64>(this.ptr + <usize>offset);
|
|
42
|
-
return be ? bswap<u64>(v) : v;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// --- Signed reads ---
|
|
46
|
-
|
|
47
|
-
@inline getI8(offset: i32): i8 {
|
|
48
|
-
if (<u32>offset >= <u32>this.length) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
49
|
-
return load<i8>(this.ptr + <usize>offset);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
@inline getI16(offset: i32, be: bool = true): i16 {
|
|
53
|
-
if ((offset >>> 31) | i32(offset + 2 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
54
|
-
let v = load<i16>(this.ptr + <usize>offset);
|
|
55
|
-
return be ? <i16>bswap<u16>(<u16>v) : v;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
@inline getI32(offset: i32, be: bool = true): i32 {
|
|
59
|
-
if ((offset >>> 31) | i32(offset + 4 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
60
|
-
let v = load<i32>(this.ptr + <usize>offset);
|
|
61
|
-
return be ? <i32>bswap<u32>(<u32>v) : v;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
@inline getI64(offset: i32, be: bool = true): i64 {
|
|
65
|
-
if ((offset >>> 31) | i32(offset + 8 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
66
|
-
let v = load<i64>(this.ptr + <usize>offset);
|
|
67
|
-
return be ? <i64>bswap<u64>(<u64>v) : v;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// --- Unsigned writes ---
|
|
71
|
-
|
|
72
|
-
@inline setU8(offset: i32, value: u8): void {
|
|
73
|
-
if (<u32>offset >= <u32>this.length) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
74
|
-
store<u8>(this.ptr + <usize>offset, value);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
@inline setU16(offset: i32, value: u16, be: bool = true): void {
|
|
78
|
-
if ((offset >>> 31) | i32(offset + 2 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
79
|
-
store<u16>(this.ptr + <usize>offset, be ? bswap<u16>(value) : value);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
@inline setU32(offset: i32, value: u32, be: bool = true): void {
|
|
83
|
-
if ((offset >>> 31) | i32(offset + 4 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
84
|
-
store<u32>(this.ptr + <usize>offset, be ? bswap<u32>(value) : value);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
@inline setU64(offset: i32, value: u64, be: bool = true): void {
|
|
88
|
-
if ((offset >>> 31) | i32(offset + 8 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
89
|
-
store<u64>(this.ptr + <usize>offset, be ? bswap<u64>(value) : value);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// --- Signed writes ---
|
|
93
|
-
|
|
94
|
-
@inline setI8(offset: i32, value: i8): void {
|
|
95
|
-
if (<u32>offset >= <u32>this.length) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
96
|
-
store<i8>(this.ptr + <usize>offset, value);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
@inline setI16(offset: i32, value: i16, be: bool = true): void {
|
|
100
|
-
if ((offset >>> 31) | i32(offset + 2 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
101
|
-
store<i16>(this.ptr + <usize>offset, be ? <i16>bswap<u16>(<u16>value) : value);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
@inline setI32(offset: i32, value: i32, be: bool = true): void {
|
|
105
|
-
if ((offset >>> 31) | i32(offset + 4 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
106
|
-
store<i32>(this.ptr + <usize>offset, be ? <i32>bswap<u32>(<u32>value) : value);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
@inline setI64(offset: i32, value: i64, be: bool = true): void {
|
|
110
|
-
if ((offset >>> 31) | i32(offset + 8 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
111
|
-
store<i64>(this.ptr + <usize>offset, be ? <i64>bswap<u64>(<u64>value) : value);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// --- Byte indexing operators ---
|
|
115
|
-
|
|
116
|
-
@operator("[]") private __get(index: i32): u8 {
|
|
117
|
-
if (<u32>index >= <u32>this.length) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
118
|
-
return load<u8>(this.ptr + <usize>index);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
@operator("[]=") private __set(index: i32, value: u8): void {
|
|
122
|
-
if (<u32>index >= <u32>this.length) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
123
|
-
store<u8>(this.ptr + <usize>index, value);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// --- Bulk operations ---
|
|
127
|
-
|
|
128
|
-
slice(start: i32, end: i32 = this.length): ByteSlice {
|
|
129
|
-
let len = this.length;
|
|
130
|
-
if (start < 0) start = max(len + start, 0);
|
|
131
|
-
if (end < 0) end = max(len + end, 0);
|
|
132
|
-
start = min(start, len);
|
|
133
|
-
end = min(end, len);
|
|
134
|
-
let newLen = max(end - start, 0);
|
|
135
|
-
return new ByteSlice(this.ptr + <usize>start, newLen);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
copyTo(dst: ByteSlice, dstOff: i32 = 0, srcOff: i32 = 0, count: i32 = this.length - srcOff): void {
|
|
139
|
-
if (
|
|
140
|
-
(count >>> 31) |
|
|
141
|
-
(srcOff >>> 31) | i32(srcOff + count > this.length) |
|
|
142
|
-
(dstOff >>> 31) | i32(dstOff + count > dst.length)
|
|
143
|
-
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
144
|
-
memory.copy(dst.ptr + <usize>dstOff, this.ptr + <usize>srcOff, <usize>count);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
fill(value: u8, start: i32 = 0, end: i32 = this.length): void {
|
|
148
|
-
let len = this.length;
|
|
149
|
-
if (start < 0) start = max(len + start, 0);
|
|
150
|
-
if (end < 0) end = max(len + end, 0);
|
|
151
|
-
start = min(start, len);
|
|
152
|
-
end = min(end, len);
|
|
153
|
-
if (start < end) {
|
|
154
|
-
memory.fill(this.ptr + <usize>start, value, <usize>(end - start));
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
equals(other: ByteSlice): bool {
|
|
159
|
-
if (this.length != other.length) return false;
|
|
160
|
-
if (this.length == 0) return true;
|
|
161
|
-
return memory.compare(this.ptr, other.ptr, <usize>this.length) == 0;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
toPointer<T>(): Pointer<T> {
|
|
165
|
-
return new Pointer<T>(this.ptr);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
toString(): string {
|
|
169
|
-
return "[object ByteSlice]";
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
// RT integration — ptr is raw usize, not managed
|
|
173
|
-
|
|
174
|
-
@unsafe private __visit(_cookie: u32): void {
|
|
175
|
-
// no-op: ptr is raw, not a managed reference
|
|
176
|
-
}
|
|
177
|
-
}
|
|
1
|
+
/// <reference path="./rt/index.d.ts" />
|
|
2
|
+
|
|
3
|
+
import { Pointer } from "./pointer";
|
|
4
|
+
import { E_INDEXOUTOFRANGE, E_INVALIDLENGTH } from "./util/error";
|
|
5
|
+
|
|
6
|
+
// Zero-alloc memory view: pointer + length with bounds-checked endian-aware reads/writes.
|
|
7
|
+
// Unlike DataView, does not own an ArrayBuffer — the viewed memory is unowned/raw.
|
|
8
|
+
|
|
9
|
+
@final
|
|
10
|
+
export class ByteSlice {
|
|
11
|
+
readonly ptr: usize;
|
|
12
|
+
readonly length: i32;
|
|
13
|
+
|
|
14
|
+
constructor(ptr: usize, length: i32) {
|
|
15
|
+
if (length < 0) throw new RangeError(E_INVALIDLENGTH);
|
|
16
|
+
this.ptr = ptr;
|
|
17
|
+
this.length = length;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// --- Unsigned reads ---
|
|
21
|
+
|
|
22
|
+
@inline getU8(offset: i32): u8 {
|
|
23
|
+
if (<u32>offset >= <u32>this.length) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
24
|
+
return load<u8>(this.ptr + <usize>offset);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@inline getU16(offset: i32, be: bool = true): u16 {
|
|
28
|
+
if ((offset >>> 31) | i32(offset + 2 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
29
|
+
let v = load<u16>(this.ptr + <usize>offset);
|
|
30
|
+
return be ? bswap<u16>(v) : v;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@inline getU32(offset: i32, be: bool = true): u32 {
|
|
34
|
+
if ((offset >>> 31) | i32(offset + 4 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
35
|
+
let v = load<u32>(this.ptr + <usize>offset);
|
|
36
|
+
return be ? bswap<u32>(v) : v;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
@inline getU64(offset: i32, be: bool = true): u64 {
|
|
40
|
+
if ((offset >>> 31) | i32(offset + 8 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
41
|
+
let v = load<u64>(this.ptr + <usize>offset);
|
|
42
|
+
return be ? bswap<u64>(v) : v;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// --- Signed reads ---
|
|
46
|
+
|
|
47
|
+
@inline getI8(offset: i32): i8 {
|
|
48
|
+
if (<u32>offset >= <u32>this.length) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
49
|
+
return load<i8>(this.ptr + <usize>offset);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
@inline getI16(offset: i32, be: bool = true): i16 {
|
|
53
|
+
if ((offset >>> 31) | i32(offset + 2 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
54
|
+
let v = load<i16>(this.ptr + <usize>offset);
|
|
55
|
+
return be ? <i16>bswap<u16>(<u16>v) : v;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@inline getI32(offset: i32, be: bool = true): i32 {
|
|
59
|
+
if ((offset >>> 31) | i32(offset + 4 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
60
|
+
let v = load<i32>(this.ptr + <usize>offset);
|
|
61
|
+
return be ? <i32>bswap<u32>(<u32>v) : v;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@inline getI64(offset: i32, be: bool = true): i64 {
|
|
65
|
+
if ((offset >>> 31) | i32(offset + 8 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
66
|
+
let v = load<i64>(this.ptr + <usize>offset);
|
|
67
|
+
return be ? <i64>bswap<u64>(<u64>v) : v;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// --- Unsigned writes ---
|
|
71
|
+
|
|
72
|
+
@inline setU8(offset: i32, value: u8): void {
|
|
73
|
+
if (<u32>offset >= <u32>this.length) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
74
|
+
store<u8>(this.ptr + <usize>offset, value);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@inline setU16(offset: i32, value: u16, be: bool = true): void {
|
|
78
|
+
if ((offset >>> 31) | i32(offset + 2 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
79
|
+
store<u16>(this.ptr + <usize>offset, be ? bswap<u16>(value) : value);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
@inline setU32(offset: i32, value: u32, be: bool = true): void {
|
|
83
|
+
if ((offset >>> 31) | i32(offset + 4 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
84
|
+
store<u32>(this.ptr + <usize>offset, be ? bswap<u32>(value) : value);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
@inline setU64(offset: i32, value: u64, be: bool = true): void {
|
|
88
|
+
if ((offset >>> 31) | i32(offset + 8 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
89
|
+
store<u64>(this.ptr + <usize>offset, be ? bswap<u64>(value) : value);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// --- Signed writes ---
|
|
93
|
+
|
|
94
|
+
@inline setI8(offset: i32, value: i8): void {
|
|
95
|
+
if (<u32>offset >= <u32>this.length) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
96
|
+
store<i8>(this.ptr + <usize>offset, value);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@inline setI16(offset: i32, value: i16, be: bool = true): void {
|
|
100
|
+
if ((offset >>> 31) | i32(offset + 2 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
101
|
+
store<i16>(this.ptr + <usize>offset, be ? <i16>bswap<u16>(<u16>value) : value);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
@inline setI32(offset: i32, value: i32, be: bool = true): void {
|
|
105
|
+
if ((offset >>> 31) | i32(offset + 4 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
106
|
+
store<i32>(this.ptr + <usize>offset, be ? <i32>bswap<u32>(<u32>value) : value);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
@inline setI64(offset: i32, value: i64, be: bool = true): void {
|
|
110
|
+
if ((offset >>> 31) | i32(offset + 8 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
111
|
+
store<i64>(this.ptr + <usize>offset, be ? <i64>bswap<u64>(<u64>value) : value);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// --- Byte indexing operators ---
|
|
115
|
+
|
|
116
|
+
@operator("[]") private __get(index: i32): u8 {
|
|
117
|
+
if (<u32>index >= <u32>this.length) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
118
|
+
return load<u8>(this.ptr + <usize>index);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
@operator("[]=") private __set(index: i32, value: u8): void {
|
|
122
|
+
if (<u32>index >= <u32>this.length) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
123
|
+
store<u8>(this.ptr + <usize>index, value);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// --- Bulk operations ---
|
|
127
|
+
|
|
128
|
+
slice(start: i32, end: i32 = this.length): ByteSlice {
|
|
129
|
+
let len = this.length;
|
|
130
|
+
if (start < 0) start = max(len + start, 0);
|
|
131
|
+
if (end < 0) end = max(len + end, 0);
|
|
132
|
+
start = min(start, len);
|
|
133
|
+
end = min(end, len);
|
|
134
|
+
let newLen = max(end - start, 0);
|
|
135
|
+
return new ByteSlice(this.ptr + <usize>start, newLen);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
copyTo(dst: ByteSlice, dstOff: i32 = 0, srcOff: i32 = 0, count: i32 = this.length - srcOff): void {
|
|
139
|
+
if (
|
|
140
|
+
(count >>> 31) |
|
|
141
|
+
(srcOff >>> 31) | i32(srcOff + count > this.length) |
|
|
142
|
+
(dstOff >>> 31) | i32(dstOff + count > dst.length)
|
|
143
|
+
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
144
|
+
memory.copy(dst.ptr + <usize>dstOff, this.ptr + <usize>srcOff, <usize>count);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
fill(value: u8, start: i32 = 0, end: i32 = this.length): void {
|
|
148
|
+
let len = this.length;
|
|
149
|
+
if (start < 0) start = max(len + start, 0);
|
|
150
|
+
if (end < 0) end = max(len + end, 0);
|
|
151
|
+
start = min(start, len);
|
|
152
|
+
end = min(end, len);
|
|
153
|
+
if (start < end) {
|
|
154
|
+
memory.fill(this.ptr + <usize>start, value, <usize>(end - start));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
equals(other: ByteSlice): bool {
|
|
159
|
+
if (this.length != other.length) return false;
|
|
160
|
+
if (this.length == 0) return true;
|
|
161
|
+
return memory.compare(this.ptr, other.ptr, <usize>this.length) == 0;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
toPointer<T>(): Pointer<T> {
|
|
165
|
+
return new Pointer<T>(this.ptr);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
toString(): string {
|
|
169
|
+
return "[object ByteSlice]";
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// RT integration — ptr is raw usize, not managed
|
|
173
|
+
|
|
174
|
+
@unsafe private __visit(_cookie: u32): void {
|
|
175
|
+
// no-op: ptr is raw, not a managed reference
|
|
176
|
+
}
|
|
177
|
+
}
|
package/std/assembly/compat.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type ReturnType<T> = returnof<T>;
|
|
2
|
-
export type NonNullable<T> = nonnull<T>;
|
|
1
|
+
export type ReturnType<T> = returnof<T>;
|
|
2
|
+
export type NonNullable<T> = nonnull<T>;
|
package/std/assembly/console.ts
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
import {
|
|
2
|
-
console as binding
|
|
3
|
-
} from "./bindings/dom";
|
|
4
|
-
|
|
5
|
-
export namespace console {
|
|
6
|
-
|
|
7
|
-
export function assert<T>(condition: T, message: string = ""): void {
|
|
8
|
-
binding.assert(!!condition, message);
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export function log(message: string = ""): void {
|
|
12
|
-
binding.log(message);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export function debug(message: string = ""): void {
|
|
16
|
-
binding.debug(message);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export function info(message: string = ""): void {
|
|
20
|
-
binding.info(message);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export function warn(message: string = ""): void {
|
|
24
|
-
binding.warn(message);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export function error(message: string = ""): void {
|
|
28
|
-
binding.error(message);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export function time(label: string = "default"): void {
|
|
32
|
-
binding.time(label);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export function timeLog(label: string = "default"): void {
|
|
36
|
-
binding.timeLog(label);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export function timeEnd(label: string = "default"): void {
|
|
40
|
-
binding.timeEnd(label);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
console as binding
|
|
3
|
+
} from "./bindings/dom";
|
|
4
|
+
|
|
5
|
+
export namespace console {
|
|
6
|
+
|
|
7
|
+
export function assert<T>(condition: T, message: string = ""): void {
|
|
8
|
+
binding.assert(!!condition, message);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function log(message: string = ""): void {
|
|
12
|
+
binding.log(message);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function debug(message: string = ""): void {
|
|
16
|
+
binding.debug(message);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function info(message: string = ""): void {
|
|
20
|
+
binding.info(message);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function warn(message: string = ""): void {
|
|
24
|
+
binding.warn(message);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function error(message: string = ""): void {
|
|
28
|
+
binding.error(message);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function time(label: string = "default"): void {
|
|
32
|
+
binding.time(label);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function timeLog(label: string = "default"): void {
|
|
36
|
+
binding.timeLog(label);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function timeEnd(label: string = "default"): void {
|
|
40
|
+
binding.timeEnd(label);
|
|
41
|
+
}
|
|
42
|
+
}
|
package/std/assembly/crypto.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
crypto as crypto_binding
|
|
3
|
-
} from "bindings/dom";
|
|
4
|
-
|
|
5
|
-
export namespace crypto {
|
|
6
|
-
export function getRandomValues(array: Uint8Array): void {
|
|
7
|
-
crypto_binding.getRandomValues(array);
|
|
8
|
-
}
|
|
9
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
crypto as crypto_binding
|
|
3
|
+
} from "bindings/dom";
|
|
4
|
+
|
|
5
|
+
export namespace crypto {
|
|
6
|
+
export function getRandomValues(array: Uint8Array): void {
|
|
7
|
+
crypto_binding.getRandomValues(array);
|
|
8
|
+
}
|
|
9
|
+
}
|