json-as 1.0.7 → 1.0.9
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/CHANGELOG.md +15 -0
- package/README.md +18 -2
- package/asconfig.json +1 -2
- package/assembly/__benches__/abc.bench.ts +5 -5
- package/assembly/__benches__/large.bench.ts +5 -51
- package/assembly/{custom → __benches__/lib}/bench.ts +4 -0
- package/assembly/__benches__/medium.bench.ts +3 -3
- package/assembly/__benches__/small.bench.ts +1 -1
- package/assembly/__benches__/vec3.bench.ts +3 -49
- package/assembly/__tests__/custom.spec.ts +4 -3
- package/assembly/__tests__/hierarchy.spec.ts +55 -0
- package/assembly/__tests__/lib/index.ts +1 -0
- package/assembly/custom/util.ts +0 -4
- package/assembly/deserialize/simple/array/box.ts +45 -0
- package/assembly/deserialize/simple/array/object.ts +28 -0
- package/assembly/deserialize/simple/array.ts +8 -0
- package/assembly/index.ts +39 -41
- package/assembly/serialize/simd/string.ts +12 -12
- package/assembly/test.ts +46 -133
- package/assembly/util/idofd.ts +6 -0
- package/bench/abc.bench.ts +1 -1
- package/bench/large.bench.ts +3 -3
- package/bench/lib/bench.ts +12 -0
- package/bench/medium.bench.ts +1 -1
- package/bench/runners/assemblyscript.js +28 -0
- package/bench/small.bench.ts +1 -1
- package/bench/tsconfig.json +12 -0
- package/bench/vec3.bench.ts +1 -1
- package/package.json +3 -4
- package/run-bench.as.sh +44 -18
- package/run-bench.js.sh +32 -6
- package/run-tests.sh +1 -1
- package/transform/lib/index.js +381 -122
- package/transform/lib/index.js.map +1 -1
- package/transform/lib/types.js +1 -0
- package/transform/lib/types.js.map +1 -1
- package/transform/src/index.ts +430 -117
- package/transform/src/types.ts +1 -0
- package/assembly/__benches__/lib/index.ts +0 -26
- package/assembly/custom/memory.ts +0 -25
- package/assembly/custom/sink.ts +0 -231
- package/assembly/custom/types.ts +0 -5
package/transform/src/types.ts
CHANGED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export function describe(description: string, routine: () => void): void {
|
|
2
|
-
routine();
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
export function it(description: string, routine: () => void): void {
|
|
6
|
-
routine();
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export function expect(left: string): Expectation {
|
|
10
|
-
return new Expectation(left);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
class Expectation {
|
|
14
|
-
public left: string;
|
|
15
|
-
|
|
16
|
-
constructor(left: string) {
|
|
17
|
-
this.left = left;
|
|
18
|
-
}
|
|
19
|
-
toBe(right: string): void {
|
|
20
|
-
if (this.left != right) {
|
|
21
|
-
console.log(" (expected) -> " + right);
|
|
22
|
-
console.log(" (received) -> " + this.left);
|
|
23
|
-
process.exit(1);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { BLOCK_MAXSIZE, OBJECT, TOTAL_OVERHEAD } from "rt/common";
|
|
2
|
-
import { E_INVALIDLENGTH } from "util/error";
|
|
3
|
-
|
|
4
|
-
// @ts-ignore: Decorator valid here
|
|
5
|
-
@inline export function ensureCapacity<T>(obj: T, newSize: usize): usize {
|
|
6
|
-
const ptr = changetype<usize>(obj);
|
|
7
|
-
const oldCapacity = changetype<OBJECT>(ptr - TOTAL_OVERHEAD).rtSize;
|
|
8
|
-
if (newSize > oldCapacity) {
|
|
9
|
-
if (newSize > BLOCK_MAXSIZE) throw new RangeError(E_INVALIDLENGTH);
|
|
10
|
-
const newCapacity = max(min(oldCapacity << 1, BLOCK_MAXSIZE), newSize);
|
|
11
|
-
const newObj = __renew(ptr, newCapacity);
|
|
12
|
-
return newObj;
|
|
13
|
-
}
|
|
14
|
-
return ptr;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
// @ts-ignore: Decorator valid here
|
|
18
|
-
@inline export function setCapacity<T>(obj: T, oldCapacity: usize, newCapacity: usize): usize {
|
|
19
|
-
const ptr = changetype<usize>(obj);
|
|
20
|
-
if (newCapacity > oldCapacity) {
|
|
21
|
-
if (newCapacity > BLOCK_MAXSIZE) throw new RangeError(E_INVALIDLENGTH);
|
|
22
|
-
return __renew(ptr, newCapacity);
|
|
23
|
-
}
|
|
24
|
-
return ptr;
|
|
25
|
-
}
|
package/assembly/custom/sink.ts
DELETED
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
import { itoa_buffered, dtoa_buffered } from "util/number";
|
|
2
|
-
|
|
3
|
-
const MIN_BUFFER_LEN = 32;
|
|
4
|
-
const MIN_BUFFER_SIZE: u32 = MIN_BUFFER_LEN << 1;
|
|
5
|
-
|
|
6
|
-
const NEW_LINE_CHAR: u16 = 0x0a; // \n
|
|
7
|
-
|
|
8
|
-
// @ts-ignore: decorator
|
|
9
|
-
function nextPowerOf2(n: u32): u32 {
|
|
10
|
-
return 1 << (32 - clz(n - 1));
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export class Sink {
|
|
14
|
-
public buffer!: ArrayBuffer;
|
|
15
|
-
public offset: u32 = 0;
|
|
16
|
-
|
|
17
|
-
static withCapacity(capacity: i32): Sink {
|
|
18
|
-
const sink = new Sink();
|
|
19
|
-
sink.buffer = changetype<ArrayBuffer>(__new(max<u32>(MIN_BUFFER_SIZE, (<u32>capacity) << 1), idof<ArrayBuffer>()));
|
|
20
|
-
return sink;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
static fromString(initial: string = "", capacity: i32 = MIN_BUFFER_LEN): Sink {
|
|
24
|
-
const sink = new Sink();
|
|
25
|
-
const size = (<u32>initial.length) << 1;
|
|
26
|
-
sink.buffer = changetype<ArrayBuffer>(__new(max<u32>(size, max<u32>(MIN_BUFFER_SIZE, (<u32>capacity) << 1)), idof<ArrayBuffer>()));
|
|
27
|
-
if (size) {
|
|
28
|
-
memory.copy(changetype<usize>(sink.buffer), changetype<usize>(initial), size);
|
|
29
|
-
sink.offset += size;
|
|
30
|
-
}
|
|
31
|
-
return sink;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
static fromStringLiteral(initial: string = ""): Sink {
|
|
35
|
-
const sink = new Sink();
|
|
36
|
-
const size = (<u32>initial.length) << 1;
|
|
37
|
-
sink.buffer = changetype<ArrayBuffer>(__new(size, idof<ArrayBuffer>()));
|
|
38
|
-
if (size) {
|
|
39
|
-
memory.copy(changetype<usize>(sink.buffer), changetype<usize>(initial), size);
|
|
40
|
-
sink.offset += size;
|
|
41
|
-
}
|
|
42
|
-
return sink;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
static fromBuffer(initial: ArrayBuffer, capacity: i32 = MIN_BUFFER_LEN): Sink {
|
|
46
|
-
const sink = new Sink();
|
|
47
|
-
const size = <u32>initial.byteLength;
|
|
48
|
-
sink.buffer = changetype<ArrayBuffer>(__new(max<u32>(size, max<u32>(MIN_BUFFER_SIZE, (<u32>capacity) << 1)), idof<ArrayBuffer>()));
|
|
49
|
-
if (size) {
|
|
50
|
-
memory.copy(changetype<usize>(sink.buffer), changetype<usize>(initial), size);
|
|
51
|
-
sink.offset = size;
|
|
52
|
-
}
|
|
53
|
-
return sink;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
constructor() {}
|
|
57
|
-
|
|
58
|
-
get length(): i32 {
|
|
59
|
-
return this.offset >> 1;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
get capacity(): i32 {
|
|
63
|
-
return this.buffer.byteLength >>> 1;
|
|
64
|
-
}
|
|
65
|
-
reset(): void {
|
|
66
|
-
this.offset = 0;
|
|
67
|
-
}
|
|
68
|
-
write(src: string, start: i32 = 0, end: i32 = i32.MAX_VALUE): Sink | null {
|
|
69
|
-
let len = src.length as u32;
|
|
70
|
-
|
|
71
|
-
if (start != 0 || end != i32.MAX_VALUE) {
|
|
72
|
-
let from: i32;
|
|
73
|
-
from = min<i32>(max(start, 0), len);
|
|
74
|
-
end = min<i32>(max(end, 0), len);
|
|
75
|
-
start = min<i32>(from, end);
|
|
76
|
-
end = max<i32>(from, end);
|
|
77
|
-
len = end - start;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
if (!len) return null;
|
|
81
|
-
|
|
82
|
-
let size = len << 1;
|
|
83
|
-
this.ensureCapacity(size);
|
|
84
|
-
let offset = this.offset;
|
|
85
|
-
|
|
86
|
-
memory.copy(changetype<usize>(this.buffer) + offset, changetype<usize>(src) + ((<usize>start) << 1), size);
|
|
87
|
-
this.offset = offset + size;
|
|
88
|
-
return this;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
writeLn(src: string = "", start: i32 = 0, end: i32 = i32.MAX_VALUE): Sink {
|
|
92
|
-
let len = src.length as u32;
|
|
93
|
-
if (start != 0 || end != i32.MAX_VALUE) {
|
|
94
|
-
let from: i32;
|
|
95
|
-
from = min<i32>(max(start, 0), len);
|
|
96
|
-
end = min<i32>(max(end, 0), len);
|
|
97
|
-
start = min<i32>(from, end);
|
|
98
|
-
end = max<i32>(from, end);
|
|
99
|
-
len = end - start;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
let size = len << 1;
|
|
103
|
-
this.ensureCapacity(size + 2);
|
|
104
|
-
let offset = this.offset;
|
|
105
|
-
let dest = changetype<usize>(this.buffer) + offset;
|
|
106
|
-
if (size) memory.copy(dest, changetype<usize>(src) + ((<usize>start) << 1), size);
|
|
107
|
-
store<u16>(dest + size, NEW_LINE_CHAR);
|
|
108
|
-
this.offset = offset + (size + 2);
|
|
109
|
-
return this;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
writeCodePoint(code: i32): Sink {
|
|
113
|
-
let hasSur = <u32>code > 0xffff;
|
|
114
|
-
this.ensureCapacity(2 << i32(hasSur));
|
|
115
|
-
|
|
116
|
-
let offset = this.offset;
|
|
117
|
-
let dest = changetype<usize>(this.buffer) + offset;
|
|
118
|
-
|
|
119
|
-
if (!hasSur) {
|
|
120
|
-
store<u16>(dest, <u16>code);
|
|
121
|
-
this.offset = offset + 2;
|
|
122
|
-
} else {
|
|
123
|
-
assert(<u32>code <= 0x10ffff);
|
|
124
|
-
code -= 0x10000;
|
|
125
|
-
let hi = (code & 0x03ff) | 0xdc00;
|
|
126
|
-
let lo = (code >>> 10) | 0xd800;
|
|
127
|
-
store<u32>(dest, lo | (hi << 16));
|
|
128
|
-
this.offset = offset + 4;
|
|
129
|
-
}
|
|
130
|
-
return this;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
writeCodePoint16(code: i32): Sink {
|
|
134
|
-
this.ensureCapacity(2);
|
|
135
|
-
|
|
136
|
-
let offset = this.offset;
|
|
137
|
-
let dest = changetype<usize>(this.buffer) + offset;
|
|
138
|
-
|
|
139
|
-
store<u16>(dest, <u16>code);
|
|
140
|
-
this.offset = offset + 2;
|
|
141
|
-
|
|
142
|
-
return this;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
writeCodePointUnsafe(code: i32): Sink {
|
|
146
|
-
this.ensureCapacity(2);
|
|
147
|
-
|
|
148
|
-
let offset = this.offset;
|
|
149
|
-
let dest = changetype<usize>(this.buffer) + offset;
|
|
150
|
-
|
|
151
|
-
code -= 0x10000;
|
|
152
|
-
let hi = (code & 0x03ff) | 0xdc00;
|
|
153
|
-
let lo = (code >>> 10) | 0xd800;
|
|
154
|
-
store<u32>(dest, lo | (hi << 16));
|
|
155
|
-
this.offset = offset + 4;
|
|
156
|
-
return this;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
writeNumber<T extends number>(value: T): Sink {
|
|
160
|
-
let offset = this.offset;
|
|
161
|
-
if (isInteger<T>()) {
|
|
162
|
-
let maxCapacity = 0;
|
|
163
|
-
// this also include size for sign
|
|
164
|
-
if (sizeof<T>() == 1) {
|
|
165
|
-
maxCapacity = 4 << 1;
|
|
166
|
-
} else if (sizeof<T>() == 2) {
|
|
167
|
-
maxCapacity = 6 << 1;
|
|
168
|
-
} else if (sizeof<T>() == 4) {
|
|
169
|
-
maxCapacity = 11 << 1;
|
|
170
|
-
} else if (sizeof<T>() == 8) {
|
|
171
|
-
maxCapacity = 21 << 1;
|
|
172
|
-
}
|
|
173
|
-
this.ensureCapacity(maxCapacity);
|
|
174
|
-
offset += itoa_buffered(changetype<usize>(this.buffer) + offset, value) << 1;
|
|
175
|
-
} else {
|
|
176
|
-
this.ensureCapacity(32 << 1);
|
|
177
|
-
offset += dtoa_buffered(changetype<usize>(this.buffer) + offset, value) << 1;
|
|
178
|
-
}
|
|
179
|
-
this.offset = offset;
|
|
180
|
-
return this;
|
|
181
|
-
}
|
|
182
|
-
writeNumberUnsafe<T extends number>(value: T): Sink {
|
|
183
|
-
let offset = this.offset;
|
|
184
|
-
if (isInteger<T>()) {
|
|
185
|
-
offset += itoa_buffered(changetype<usize>(this.buffer) + offset, value) << 1;
|
|
186
|
-
} else {
|
|
187
|
-
offset += dtoa_buffered(changetype<usize>(this.buffer) + offset, value) << 1;
|
|
188
|
-
}
|
|
189
|
-
this.offset = offset;
|
|
190
|
-
return this;
|
|
191
|
-
}
|
|
192
|
-
writeIntegerUnsafe<T extends number>(value: T): Sink {
|
|
193
|
-
let offset = this.offset;
|
|
194
|
-
if (isInteger<T>()) {
|
|
195
|
-
offset += itoa_buffered(changetype<usize>(this.buffer) + offset, value) << 1;
|
|
196
|
-
} else {
|
|
197
|
-
offset += dtoa_buffered(changetype<usize>(this.buffer) + offset, value) << 1;
|
|
198
|
-
}
|
|
199
|
-
this.offset = offset;
|
|
200
|
-
return this;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
reserve(capacity: i32, clear: bool = false): void {
|
|
204
|
-
if (clear) this.offset = 0;
|
|
205
|
-
this.buffer = changetype<ArrayBuffer>(__renew(changetype<usize>(this.buffer), max<u32>(this.offset, max<u32>(MIN_BUFFER_SIZE, (<u32>capacity) << 1))));
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
shrink(): void {
|
|
209
|
-
this.buffer = changetype<ArrayBuffer>(__renew(changetype<usize>(this.buffer), max<u32>(this.offset, MIN_BUFFER_SIZE)));
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
clear(): void {
|
|
213
|
-
this.reserve(0, true);
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
toString(): string {
|
|
217
|
-
let size = this.offset;
|
|
218
|
-
if (!size) return "";
|
|
219
|
-
let out = changetype<string>(__new(size, idof<string>()));
|
|
220
|
-
memory.copy(changetype<usize>(out), changetype<usize>(this.buffer), size);
|
|
221
|
-
return out;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
ensureCapacity(deltaBytes: u32): void {
|
|
225
|
-
let buffer = this.buffer;
|
|
226
|
-
let newSize = this.offset + deltaBytes;
|
|
227
|
-
if (newSize > <u32>buffer.byteLength) {
|
|
228
|
-
this.buffer = changetype<ArrayBuffer>(__renew(changetype<usize>(buffer), nextPowerOf2(newSize)));
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|