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
package/std/assembly/dataview.ts
CHANGED
|
@@ -1,181 +1,181 @@
|
|
|
1
|
-
import { BLOCK_MAXSIZE } from "./rt/common";
|
|
2
|
-
import { ArrayBuffer } from "./arraybuffer";
|
|
3
|
-
import { E_INDEXOUTOFRANGE, E_INVALIDLENGTH } from "./util/error";
|
|
4
|
-
|
|
5
|
-
// TODO: there is probably a smarter way to check byteOffset for accesses larger than 1 byte
|
|
6
|
-
|
|
7
|
-
export class DataView {
|
|
8
|
-
|
|
9
|
-
readonly buffer: ArrayBuffer;
|
|
10
|
-
@unsafe readonly dataStart: usize;
|
|
11
|
-
readonly byteLength: i32;
|
|
12
|
-
|
|
13
|
-
get byteOffset(): i32 {
|
|
14
|
-
return <i32>(this.dataStart - changetype<usize>(this.buffer));
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
constructor(
|
|
18
|
-
buffer: ArrayBuffer,
|
|
19
|
-
byteOffset: i32 = 0,
|
|
20
|
-
byteLength: i32 = buffer.byteLength
|
|
21
|
-
) {
|
|
22
|
-
if (
|
|
23
|
-
i32(<u32>byteLength > <u32>BLOCK_MAXSIZE) |
|
|
24
|
-
i32(<u32>byteOffset + byteLength > <u32>buffer.byteLength)
|
|
25
|
-
) throw new RangeError(E_INVALIDLENGTH);
|
|
26
|
-
this.buffer = buffer; // links
|
|
27
|
-
let dataStart = changetype<usize>(buffer) + <usize>byteOffset;
|
|
28
|
-
this.dataStart = dataStart;
|
|
29
|
-
this.byteLength = byteLength;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
getFloat32(byteOffset: i32, littleEndian: bool = false): f32 {
|
|
33
|
-
if (
|
|
34
|
-
(byteOffset >>> 31) | i32(byteOffset + 4 > this.byteLength)
|
|
35
|
-
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
36
|
-
return littleEndian
|
|
37
|
-
? load<f32>(this.dataStart + <usize>byteOffset)
|
|
38
|
-
: reinterpret<f32>(bswap<u32>(load<u32>(this.dataStart + <usize>byteOffset)));
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
getFloat64(byteOffset: i32, littleEndian: bool = false): f64 {
|
|
42
|
-
if (
|
|
43
|
-
(byteOffset >>> 31) | i32(byteOffset + 8 > this.byteLength)
|
|
44
|
-
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
45
|
-
return littleEndian
|
|
46
|
-
? load<f64>(this.dataStart + <usize>byteOffset)
|
|
47
|
-
: reinterpret<f64>(bswap<u64>(load<u64>(this.dataStart + <usize>byteOffset)));
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
getInt8(byteOffset: i32): i8 {
|
|
51
|
-
if (<u32>byteOffset >= <u32>this.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
52
|
-
return load<i8>(this.dataStart + <usize>byteOffset);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
getInt16(byteOffset: i32, littleEndian: bool = false): i16 {
|
|
56
|
-
if (
|
|
57
|
-
(byteOffset >>> 31) | i32(byteOffset + 2 > this.byteLength)
|
|
58
|
-
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
59
|
-
let result: i16 = load<i16>(this.dataStart + <usize>byteOffset);
|
|
60
|
-
return littleEndian ? result : bswap<u16>(result);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
getInt32(byteOffset: i32, littleEndian: bool = false): i32 {
|
|
64
|
-
if (
|
|
65
|
-
(byteOffset >>> 31) | i32(byteOffset + 4 > this.byteLength)
|
|
66
|
-
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
67
|
-
let result: i32 = load<i32>(this.dataStart + <usize>byteOffset);
|
|
68
|
-
return littleEndian ? result : bswap<u32>(result);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
getUint8(byteOffset: i32): u8 {
|
|
72
|
-
if (<u32>byteOffset >= <u32>this.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
73
|
-
return load<u8>(this.dataStart + <usize>byteOffset);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
getUint16(byteOffset: i32, littleEndian: bool = false): u16 {
|
|
77
|
-
if (
|
|
78
|
-
(byteOffset >>> 31) | i32(byteOffset + 2 > this.byteLength)
|
|
79
|
-
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
80
|
-
let result: u16 = load<u16>(this.dataStart + <usize>byteOffset);
|
|
81
|
-
return littleEndian ? result : bswap<u16>(result);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
getUint32(byteOffset: i32, littleEndian: bool = false): u32 {
|
|
85
|
-
if (
|
|
86
|
-
(byteOffset >>> 31) | i32(byteOffset + 4 > this.byteLength)
|
|
87
|
-
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
88
|
-
let result: u32 = load<u32>(this.dataStart + <usize>byteOffset);
|
|
89
|
-
return littleEndian ? result : bswap<u32>(result);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
setFloat32(byteOffset: i32, value: f32, littleEndian: bool = false): void {
|
|
93
|
-
if (
|
|
94
|
-
(byteOffset >>> 31) | i32(byteOffset + 4 > this.byteLength)
|
|
95
|
-
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
96
|
-
if (littleEndian) store<f32>(this.dataStart + <usize>byteOffset, value);
|
|
97
|
-
else store<u32>(this.dataStart + <usize>byteOffset, bswap<u32>(reinterpret<u32>(value)));
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
setFloat64(byteOffset: i32, value: f64, littleEndian: bool = false): void {
|
|
101
|
-
if (
|
|
102
|
-
(byteOffset >>> 31) | i32(byteOffset + 8 > this.byteLength)
|
|
103
|
-
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
104
|
-
if (littleEndian) store<f64>(this.dataStart + <usize>byteOffset, value);
|
|
105
|
-
else store<u64>(this.dataStart + <usize>byteOffset, bswap<u64>(reinterpret<u64>(value)));
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
setInt8(byteOffset: i32, value: i8): void {
|
|
109
|
-
if (<u32>byteOffset >= <u32>this.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
110
|
-
store<i8>(this.dataStart + <usize>byteOffset, value);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
setInt16(byteOffset: i32, value: i16, littleEndian: bool = false): void {
|
|
114
|
-
if (
|
|
115
|
-
(byteOffset >>> 31) | i32(byteOffset + 2 > this.byteLength)
|
|
116
|
-
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
117
|
-
store<i16>(this.dataStart + <usize>byteOffset, littleEndian ? value : bswap<u16>(value));
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
setInt32(byteOffset: i32, value: i32, littleEndian: bool = false): void {
|
|
121
|
-
if (
|
|
122
|
-
(byteOffset >>> 31) | i32(byteOffset + 4 > this.byteLength)
|
|
123
|
-
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
124
|
-
store<i32>(this.dataStart + <usize>byteOffset, littleEndian ? value : bswap<u32>(value));
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
setUint8(byteOffset: i32, value: u8): void {
|
|
128
|
-
if (<u32>byteOffset >= <u32>this.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
129
|
-
store<u8>(this.dataStart + <usize>byteOffset, value);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
setUint16(byteOffset: i32, value: u16, littleEndian: bool = false): void {
|
|
133
|
-
if (
|
|
134
|
-
(byteOffset >>> 31) | i32(byteOffset + 2 > this.byteLength)
|
|
135
|
-
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
136
|
-
store<u16>(this.dataStart + <usize>byteOffset, littleEndian ? value : bswap<u16>(value));
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
setUint32(byteOffset: i32, value: u32, littleEndian: bool = false): void {
|
|
140
|
-
if (
|
|
141
|
-
(byteOffset >>> 31) | i32(byteOffset + 4 > this.byteLength)
|
|
142
|
-
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
143
|
-
store<u32>(this.dataStart + <usize>byteOffset, littleEndian ? value : bswap<u32>(value));
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// Non-standard additions that make sense in WebAssembly, but won't work in JS:
|
|
147
|
-
|
|
148
|
-
getInt64(byteOffset: i32, littleEndian: bool = false): i64 {
|
|
149
|
-
if (
|
|
150
|
-
(byteOffset >>> 31) | i32(byteOffset + 8 > this.byteLength)
|
|
151
|
-
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
152
|
-
let result: i64 = load<i64>(this.dataStart + <usize>byteOffset);
|
|
153
|
-
return littleEndian ? result : bswap<u64>(result);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
getUint64(byteOffset: i32, littleEndian: bool = false): u64 {
|
|
157
|
-
if (
|
|
158
|
-
(byteOffset >>> 31) | i32(byteOffset + 8 > this.byteLength)
|
|
159
|
-
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
160
|
-
let result = load<u64>(this.dataStart + <usize>byteOffset);
|
|
161
|
-
return littleEndian ? result : bswap<u64>(result);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
setInt64(byteOffset: i32, value: i64, littleEndian: bool = false): void {
|
|
165
|
-
if (
|
|
166
|
-
(byteOffset >>> 31) | i32(byteOffset + 8 > this.byteLength)
|
|
167
|
-
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
168
|
-
store<i64>(this.dataStart + <usize>byteOffset, littleEndian ? value : bswap<u64>(value));
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
setUint64(byteOffset: i32, value: u64, littleEndian: bool = false): void {
|
|
172
|
-
if (
|
|
173
|
-
(byteOffset >>> 31) | i32(byteOffset + 8 > this.byteLength)
|
|
174
|
-
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
175
|
-
store<u64>(this.dataStart + <usize>byteOffset, littleEndian ? value : bswap<u64>(value));
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
toString(): string {
|
|
179
|
-
return "[object DataView]";
|
|
180
|
-
}
|
|
181
|
-
}
|
|
1
|
+
import { BLOCK_MAXSIZE } from "./rt/common";
|
|
2
|
+
import { ArrayBuffer } from "./arraybuffer";
|
|
3
|
+
import { E_INDEXOUTOFRANGE, E_INVALIDLENGTH } from "./util/error";
|
|
4
|
+
|
|
5
|
+
// TODO: there is probably a smarter way to check byteOffset for accesses larger than 1 byte
|
|
6
|
+
|
|
7
|
+
export class DataView {
|
|
8
|
+
|
|
9
|
+
readonly buffer: ArrayBuffer;
|
|
10
|
+
@unsafe readonly dataStart: usize;
|
|
11
|
+
readonly byteLength: i32;
|
|
12
|
+
|
|
13
|
+
get byteOffset(): i32 {
|
|
14
|
+
return <i32>(this.dataStart - changetype<usize>(this.buffer));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
constructor(
|
|
18
|
+
buffer: ArrayBuffer,
|
|
19
|
+
byteOffset: i32 = 0,
|
|
20
|
+
byteLength: i32 = buffer.byteLength
|
|
21
|
+
) {
|
|
22
|
+
if (
|
|
23
|
+
i32(<u32>byteLength > <u32>BLOCK_MAXSIZE) |
|
|
24
|
+
i32(<u32>byteOffset + byteLength > <u32>buffer.byteLength)
|
|
25
|
+
) throw new RangeError(E_INVALIDLENGTH);
|
|
26
|
+
this.buffer = buffer; // links
|
|
27
|
+
let dataStart = changetype<usize>(buffer) + <usize>byteOffset;
|
|
28
|
+
this.dataStart = dataStart;
|
|
29
|
+
this.byteLength = byteLength;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
getFloat32(byteOffset: i32, littleEndian: bool = false): f32 {
|
|
33
|
+
if (
|
|
34
|
+
(byteOffset >>> 31) | i32(byteOffset + 4 > this.byteLength)
|
|
35
|
+
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
36
|
+
return littleEndian
|
|
37
|
+
? load<f32>(this.dataStart + <usize>byteOffset)
|
|
38
|
+
: reinterpret<f32>(bswap<u32>(load<u32>(this.dataStart + <usize>byteOffset)));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
getFloat64(byteOffset: i32, littleEndian: bool = false): f64 {
|
|
42
|
+
if (
|
|
43
|
+
(byteOffset >>> 31) | i32(byteOffset + 8 > this.byteLength)
|
|
44
|
+
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
45
|
+
return littleEndian
|
|
46
|
+
? load<f64>(this.dataStart + <usize>byteOffset)
|
|
47
|
+
: reinterpret<f64>(bswap<u64>(load<u64>(this.dataStart + <usize>byteOffset)));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
getInt8(byteOffset: i32): i8 {
|
|
51
|
+
if (<u32>byteOffset >= <u32>this.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
52
|
+
return load<i8>(this.dataStart + <usize>byteOffset);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
getInt16(byteOffset: i32, littleEndian: bool = false): i16 {
|
|
56
|
+
if (
|
|
57
|
+
(byteOffset >>> 31) | i32(byteOffset + 2 > this.byteLength)
|
|
58
|
+
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
59
|
+
let result: i16 = load<i16>(this.dataStart + <usize>byteOffset);
|
|
60
|
+
return littleEndian ? result : bswap<u16>(result);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
getInt32(byteOffset: i32, littleEndian: bool = false): i32 {
|
|
64
|
+
if (
|
|
65
|
+
(byteOffset >>> 31) | i32(byteOffset + 4 > this.byteLength)
|
|
66
|
+
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
67
|
+
let result: i32 = load<i32>(this.dataStart + <usize>byteOffset);
|
|
68
|
+
return littleEndian ? result : bswap<u32>(result);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
getUint8(byteOffset: i32): u8 {
|
|
72
|
+
if (<u32>byteOffset >= <u32>this.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
73
|
+
return load<u8>(this.dataStart + <usize>byteOffset);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
getUint16(byteOffset: i32, littleEndian: bool = false): u16 {
|
|
77
|
+
if (
|
|
78
|
+
(byteOffset >>> 31) | i32(byteOffset + 2 > this.byteLength)
|
|
79
|
+
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
80
|
+
let result: u16 = load<u16>(this.dataStart + <usize>byteOffset);
|
|
81
|
+
return littleEndian ? result : bswap<u16>(result);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
getUint32(byteOffset: i32, littleEndian: bool = false): u32 {
|
|
85
|
+
if (
|
|
86
|
+
(byteOffset >>> 31) | i32(byteOffset + 4 > this.byteLength)
|
|
87
|
+
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
88
|
+
let result: u32 = load<u32>(this.dataStart + <usize>byteOffset);
|
|
89
|
+
return littleEndian ? result : bswap<u32>(result);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
setFloat32(byteOffset: i32, value: f32, littleEndian: bool = false): void {
|
|
93
|
+
if (
|
|
94
|
+
(byteOffset >>> 31) | i32(byteOffset + 4 > this.byteLength)
|
|
95
|
+
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
96
|
+
if (littleEndian) store<f32>(this.dataStart + <usize>byteOffset, value);
|
|
97
|
+
else store<u32>(this.dataStart + <usize>byteOffset, bswap<u32>(reinterpret<u32>(value)));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
setFloat64(byteOffset: i32, value: f64, littleEndian: bool = false): void {
|
|
101
|
+
if (
|
|
102
|
+
(byteOffset >>> 31) | i32(byteOffset + 8 > this.byteLength)
|
|
103
|
+
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
104
|
+
if (littleEndian) store<f64>(this.dataStart + <usize>byteOffset, value);
|
|
105
|
+
else store<u64>(this.dataStart + <usize>byteOffset, bswap<u64>(reinterpret<u64>(value)));
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
setInt8(byteOffset: i32, value: i8): void {
|
|
109
|
+
if (<u32>byteOffset >= <u32>this.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
110
|
+
store<i8>(this.dataStart + <usize>byteOffset, value);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
setInt16(byteOffset: i32, value: i16, littleEndian: bool = false): void {
|
|
114
|
+
if (
|
|
115
|
+
(byteOffset >>> 31) | i32(byteOffset + 2 > this.byteLength)
|
|
116
|
+
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
117
|
+
store<i16>(this.dataStart + <usize>byteOffset, littleEndian ? value : bswap<u16>(value));
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
setInt32(byteOffset: i32, value: i32, littleEndian: bool = false): void {
|
|
121
|
+
if (
|
|
122
|
+
(byteOffset >>> 31) | i32(byteOffset + 4 > this.byteLength)
|
|
123
|
+
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
124
|
+
store<i32>(this.dataStart + <usize>byteOffset, littleEndian ? value : bswap<u32>(value));
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
setUint8(byteOffset: i32, value: u8): void {
|
|
128
|
+
if (<u32>byteOffset >= <u32>this.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
129
|
+
store<u8>(this.dataStart + <usize>byteOffset, value);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
setUint16(byteOffset: i32, value: u16, littleEndian: bool = false): void {
|
|
133
|
+
if (
|
|
134
|
+
(byteOffset >>> 31) | i32(byteOffset + 2 > this.byteLength)
|
|
135
|
+
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
136
|
+
store<u16>(this.dataStart + <usize>byteOffset, littleEndian ? value : bswap<u16>(value));
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
setUint32(byteOffset: i32, value: u32, littleEndian: bool = false): void {
|
|
140
|
+
if (
|
|
141
|
+
(byteOffset >>> 31) | i32(byteOffset + 4 > this.byteLength)
|
|
142
|
+
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
143
|
+
store<u32>(this.dataStart + <usize>byteOffset, littleEndian ? value : bswap<u32>(value));
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Non-standard additions that make sense in WebAssembly, but won't work in JS:
|
|
147
|
+
|
|
148
|
+
getInt64(byteOffset: i32, littleEndian: bool = false): i64 {
|
|
149
|
+
if (
|
|
150
|
+
(byteOffset >>> 31) | i32(byteOffset + 8 > this.byteLength)
|
|
151
|
+
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
152
|
+
let result: i64 = load<i64>(this.dataStart + <usize>byteOffset);
|
|
153
|
+
return littleEndian ? result : bswap<u64>(result);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
getUint64(byteOffset: i32, littleEndian: bool = false): u64 {
|
|
157
|
+
if (
|
|
158
|
+
(byteOffset >>> 31) | i32(byteOffset + 8 > this.byteLength)
|
|
159
|
+
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
160
|
+
let result = load<u64>(this.dataStart + <usize>byteOffset);
|
|
161
|
+
return littleEndian ? result : bswap<u64>(result);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
setInt64(byteOffset: i32, value: i64, littleEndian: bool = false): void {
|
|
165
|
+
if (
|
|
166
|
+
(byteOffset >>> 31) | i32(byteOffset + 8 > this.byteLength)
|
|
167
|
+
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
168
|
+
store<i64>(this.dataStart + <usize>byteOffset, littleEndian ? value : bswap<u64>(value));
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
setUint64(byteOffset: i32, value: u64, littleEndian: bool = false): void {
|
|
172
|
+
if (
|
|
173
|
+
(byteOffset >>> 31) | i32(byteOffset + 8 > this.byteLength)
|
|
174
|
+
) throw new RangeError(E_INDEXOUTOFRANGE);
|
|
175
|
+
store<u64>(this.dataStart + <usize>byteOffset, littleEndian ? value : bswap<u64>(value));
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
toString(): string {
|
|
179
|
+
return "[object DataView]";
|
|
180
|
+
}
|
|
181
|
+
}
|