json-as 1.1.15 → 1.1.16
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 +7 -2
- package/README.md +1 -10
- package/assembly/test.tmp.ts +245 -291
- package/assembly/test.ts +35 -26
- package/package.json +3 -2
- package/transform/lib/index.js +26 -29
- package/transform/lib/index.js.map +1 -1
- package/transform/src/index.ts +33 -26
package/assembly/test.tmp.ts
CHANGED
|
@@ -1,38 +1,31 @@
|
|
|
1
1
|
import { bs } from "../lib/as-bs";
|
|
2
2
|
import { JSON } from ".";
|
|
3
3
|
|
|
4
|
-
|
|
5
4
|
@json
|
|
6
|
-
class
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
class Vec3 {
|
|
6
|
+
x: f32 = 0;
|
|
7
|
+
y: f32 = 0;
|
|
8
|
+
z: f32 = 0;
|
|
10
9
|
__SERIALIZE(ptr: usize): void {
|
|
11
|
-
bs.proposeSize(
|
|
12
|
-
store<u64>(bs.offset,
|
|
13
|
-
store<
|
|
14
|
-
bs.offset +=
|
|
15
|
-
JSON.__serialize<
|
|
16
|
-
store<u64>(bs.offset,
|
|
17
|
-
store<
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
bs.offset
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
store<u64>(bs.offset, 16325694684725357, 16);
|
|
25
|
-
bs.offset += 24;
|
|
26
|
-
JSON.__serialize<string>(load<string>(ptr, offsetof<this>("lastName")));
|
|
10
|
+
bs.proposeSize(32);
|
|
11
|
+
store<u64>(bs.offset, 9570664606466171, 0);
|
|
12
|
+
store<u16>(bs.offset, 58, 8);
|
|
13
|
+
bs.offset += 10;
|
|
14
|
+
JSON.__serialize<f32>(load<f32>(ptr, offsetof<this>("x")));
|
|
15
|
+
store<u64>(bs.offset, 9570668901433388, 0);
|
|
16
|
+
store<u16>(bs.offset, 58, 8);
|
|
17
|
+
bs.offset += 10;
|
|
18
|
+
JSON.__serialize<f32>(load<f32>(ptr, offsetof<this>("y")));
|
|
19
|
+
store<u64>(bs.offset, 9570673196400684, 0);
|
|
20
|
+
store<u16>(bs.offset, 58, 8);
|
|
21
|
+
bs.offset += 10;
|
|
22
|
+
JSON.__serialize<f32>(load<f32>(ptr, offsetof<this>("z")));
|
|
27
23
|
store<u16>(bs.offset, 125, 0);
|
|
28
24
|
bs.offset += 2;
|
|
29
25
|
}
|
|
30
26
|
|
|
31
|
-
|
|
32
27
|
@inline
|
|
33
28
|
__INITIALIZE(): this {
|
|
34
|
-
this.firstName = "";
|
|
35
|
-
this.lastName = "";
|
|
36
29
|
return this;
|
|
37
30
|
}
|
|
38
31
|
__DESERIALIZE<__JSON_T>(srcStart: usize, srcEnd: usize, out: __JSON_T): __JSON_T {
|
|
@@ -71,53 +64,45 @@ class Person {
|
|
|
71
64
|
while (srcStart < srcEnd) {
|
|
72
65
|
const code = load<u16>(srcStart);
|
|
73
66
|
if (code == 34 && load<u16>(srcStart - 2) !== 92) {
|
|
67
|
+
srcStart += 4;
|
|
68
|
+
keyStart = 0;
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
srcStart += 2;
|
|
72
|
+
}
|
|
73
|
+
} else if (code - 48 <= 9 || code == 45) {
|
|
74
|
+
lastIndex = srcStart;
|
|
75
|
+
srcStart += 2;
|
|
76
|
+
while (srcStart < srcEnd) {
|
|
77
|
+
const code = load<u16>(srcStart);
|
|
78
|
+
if (code == 44 || code == 125 || JSON.Util.isSpace(code)) {
|
|
74
79
|
switch (<u32>keyEnd - <u32>keyStart) {
|
|
75
|
-
case
|
|
76
|
-
const
|
|
77
|
-
if (
|
|
78
|
-
store<
|
|
79
|
-
srcStart +=
|
|
80
|
-
keyStart = 0;
|
|
81
|
-
break;
|
|
82
|
-
} else {
|
|
83
|
-
srcStart += 4;
|
|
84
|
-
keyStart = 0;
|
|
85
|
-
break;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
case 18: {
|
|
90
|
-
const codeS8 = load<u64>(keyStart, 0);
|
|
91
|
-
const codeS16 = load<u64>(keyStart, 8);
|
|
92
|
-
if (codeS8 == 32370111954878566 && codeS16 == 30681189078401140) {
|
|
93
|
-
store<string>(changetype<usize>(out), JSON.__deserialize<string>(lastIndex, srcStart + 2), offsetof<this>("firstName"));
|
|
94
|
-
srcStart += 4;
|
|
80
|
+
case 2: {
|
|
81
|
+
const code16 = load<u16>(keyStart);
|
|
82
|
+
if (code16 == 120) {
|
|
83
|
+
store<f32>(changetype<usize>(out), JSON.__deserialize<f32>(lastIndex, srcStart), offsetof<this>("x"));
|
|
84
|
+
srcStart += 2;
|
|
95
85
|
keyStart = 0;
|
|
96
86
|
break;
|
|
97
|
-
} else {
|
|
98
|
-
srcStart
|
|
87
|
+
} else if (code16 == 121) {
|
|
88
|
+
store<f32>(changetype<usize>(out), JSON.__deserialize<f32>(lastIndex, srcStart), offsetof<this>("y"));
|
|
89
|
+
srcStart += 2;
|
|
99
90
|
keyStart = 0;
|
|
100
91
|
break;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
case 16: {
|
|
105
|
-
const codeS8 = load<u64>(keyStart, 0);
|
|
106
|
-
const codeS16 = load<u64>(keyStart, 8);
|
|
107
|
-
if (codeS8 == 32651591226032236 && codeS16 == 28429440805568590) {
|
|
108
|
-
store<string>(changetype<usize>(out), JSON.__deserialize<string>(lastIndex, srcStart + 2), offsetof<this>("lastName"));
|
|
109
|
-
srcStart += 4;
|
|
92
|
+
} else if (code16 == 122) {
|
|
93
|
+
store<f32>(changetype<usize>(out), JSON.__deserialize<f32>(lastIndex, srcStart), offsetof<this>("z"));
|
|
94
|
+
srcStart += 2;
|
|
110
95
|
keyStart = 0;
|
|
111
96
|
break;
|
|
112
97
|
} else {
|
|
113
|
-
srcStart +=
|
|
98
|
+
srcStart += 2;
|
|
114
99
|
keyStart = 0;
|
|
115
100
|
break;
|
|
116
101
|
}
|
|
117
102
|
}
|
|
118
103
|
|
|
119
104
|
default: {
|
|
120
|
-
srcStart +=
|
|
105
|
+
srcStart += 2;
|
|
121
106
|
keyStart = 0;
|
|
122
107
|
break;
|
|
123
108
|
}
|
|
@@ -126,18 +111,6 @@ class Person {
|
|
|
126
111
|
}
|
|
127
112
|
srcStart += 2;
|
|
128
113
|
}
|
|
129
|
-
} else if (code - 48 <= 9 || code == 45) {
|
|
130
|
-
lastIndex = srcStart;
|
|
131
|
-
srcStart += 2;
|
|
132
|
-
while (srcStart < srcEnd) {
|
|
133
|
-
const code = load<u16>(srcStart);
|
|
134
|
-
if (code == 44 || code == 125 || JSON.Util.isSpace(code)) {
|
|
135
|
-
srcStart += 2;
|
|
136
|
-
keyStart = 0;
|
|
137
|
-
break;
|
|
138
|
-
}
|
|
139
|
-
srcStart += 2;
|
|
140
|
-
}
|
|
141
114
|
} else if (code == 123) {
|
|
142
115
|
lastIndex = srcStart;
|
|
143
116
|
depth++;
|
|
@@ -150,7 +123,32 @@ class Person {
|
|
|
150
123
|
} else if (code == 125) {
|
|
151
124
|
if (--depth == 0) {
|
|
152
125
|
srcStart += 2;
|
|
153
|
-
keyStart
|
|
126
|
+
switch (<u32>keyEnd - <u32>keyStart) {
|
|
127
|
+
case 2: {
|
|
128
|
+
const code16 = load<u16>(keyStart);
|
|
129
|
+
if (code16 == 120) {
|
|
130
|
+
store<f32>(changetype<usize>(out), JSON.__deserialize<f32>(lastIndex, srcStart), offsetof<this>("x"));
|
|
131
|
+
keyStart = 0;
|
|
132
|
+
break;
|
|
133
|
+
} else if (code16 == 121) {
|
|
134
|
+
store<f32>(changetype<usize>(out), JSON.__deserialize<f32>(lastIndex, srcStart), offsetof<this>("y"));
|
|
135
|
+
keyStart = 0;
|
|
136
|
+
break;
|
|
137
|
+
} else if (code16 == 122) {
|
|
138
|
+
store<f32>(changetype<usize>(out), JSON.__deserialize<f32>(lastIndex, srcStart), offsetof<this>("z"));
|
|
139
|
+
keyStart = 0;
|
|
140
|
+
break;
|
|
141
|
+
} else {
|
|
142
|
+
keyStart = 0;
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
default: {
|
|
148
|
+
keyStart = 0;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
154
152
|
break;
|
|
155
153
|
}
|
|
156
154
|
} else if (code == 123) depth++;
|
|
@@ -193,26 +191,8 @@ class Person {
|
|
|
193
191
|
} else if (code == 110) {
|
|
194
192
|
if (load<u64>(srcStart) == 30399761348886638) {
|
|
195
193
|
srcStart += 8;
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
const code32 = load<u32>(keyStart);
|
|
199
|
-
if (code32 == 6553705) {
|
|
200
|
-
store<usize>(changetype<usize>(out), 0, offsetof<this>("id"));
|
|
201
|
-
srcStart += 2;
|
|
202
|
-
keyStart = 0;
|
|
203
|
-
break;
|
|
204
|
-
} else {
|
|
205
|
-
srcStart += 2;
|
|
206
|
-
keyStart = 0;
|
|
207
|
-
break;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
default: {
|
|
212
|
-
srcStart += 2;
|
|
213
|
-
keyStart = 0;
|
|
214
|
-
}
|
|
215
|
-
}
|
|
194
|
+
srcStart += 2;
|
|
195
|
+
keyStart = 0;
|
|
216
196
|
}
|
|
217
197
|
} else {
|
|
218
198
|
srcStart += 2;
|
|
@@ -224,25 +204,72 @@ class Person {
|
|
|
224
204
|
}
|
|
225
205
|
}
|
|
226
206
|
|
|
227
|
-
|
|
228
207
|
@json
|
|
229
|
-
class
|
|
230
|
-
|
|
208
|
+
class Player {
|
|
209
|
+
|
|
210
|
+
@alias("first name")
|
|
211
|
+
firstName!: string | null;
|
|
212
|
+
lastName!: string;
|
|
213
|
+
lastActive!: Array<i32>;
|
|
214
|
+
|
|
215
|
+
@omitif((self: this): boolean => self.age < 18)
|
|
216
|
+
age!: i32;
|
|
217
|
+
|
|
218
|
+
@omitnull()
|
|
219
|
+
pos!: Vec3 | null;
|
|
220
|
+
isVerified!: boolean;
|
|
231
221
|
__SERIALIZE(ptr: usize): void {
|
|
232
|
-
bs.proposeSize(
|
|
233
|
-
|
|
234
|
-
store<
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
222
|
+
bs.proposeSize(160);
|
|
223
|
+
let block: usize = 0;
|
|
224
|
+
store<u16>(bs.offset, 123, 0);
|
|
225
|
+
bs.offset += 2;
|
|
226
|
+
if (!((self: this): boolean => self.age < 18)(this)) {
|
|
227
|
+
store<u64>(bs.offset, 28429415035764770, 0);
|
|
228
|
+
store<u32>(bs.offset, 3801122, 8);
|
|
229
|
+
bs.offset += 12;
|
|
230
|
+
JSON.__serialize<i32>(load<i32>(ptr, offsetof<this>("age")));
|
|
231
|
+
store<u16>(bs.offset, 44, 0);
|
|
232
|
+
bs.offset += 2;
|
|
233
|
+
}
|
|
234
|
+
if ((block = load<usize>(ptr, offsetof<this>("pos"))) !== 0) {
|
|
235
|
+
store<u64>(bs.offset, 32370099070435362, 0);
|
|
236
|
+
store<u32>(bs.offset, 3801122, 8);
|
|
237
|
+
bs.offset += 12;
|
|
238
|
+
JSON.__serialize<Vec3 | null>(load<Vec3 | null>(ptr, offsetof<this>("pos")));
|
|
239
|
+
store<u16>(bs.offset, 44, 0);
|
|
240
|
+
bs.offset += 2;
|
|
241
|
+
}
|
|
242
|
+
store<u64>(bs.offset, 32088598323265570, 0);
|
|
243
|
+
store<u64>(bs.offset, 30962384884727923, 8);
|
|
244
|
+
store<u64>(bs.offset, 9570583007002721, 16);
|
|
245
|
+
store<u16>(bs.offset, 58, 24);
|
|
246
|
+
bs.offset += 26;
|
|
247
|
+
JSON.__serialize<string | null>(load<string | null>(ptr, offsetof<this>("firstName")));
|
|
248
|
+
store<u64>(bs.offset, 27303536599629868, 0);
|
|
249
|
+
store<u64>(bs.offset, 27303407755985011, 8);
|
|
250
|
+
store<u64>(bs.offset, 16325694684725357, 16);
|
|
251
|
+
bs.offset += 24;
|
|
252
|
+
JSON.__serialize<string>(load<string>(ptr, offsetof<this>("lastName")));
|
|
253
|
+
store<u64>(bs.offset, 27303536599629868, 0);
|
|
254
|
+
store<u64>(bs.offset, 27866301874831475, 8);
|
|
255
|
+
store<u64>(bs.offset, 28429479460798580, 16);
|
|
256
|
+
store<u32>(bs.offset, 3801122, 24);
|
|
257
|
+
bs.offset += 28;
|
|
258
|
+
JSON.__serialize<Array<i32>>(load<Array<i32>>(ptr, offsetof<this>("lastActive")));
|
|
259
|
+
store<u64>(bs.offset, 32370073295519788, 0);
|
|
260
|
+
store<u64>(bs.offset, 29555362187509846, 8);
|
|
261
|
+
store<u64>(bs.offset, 28147931469643878, 16);
|
|
262
|
+
store<u32>(bs.offset, 3801122, 24);
|
|
263
|
+
bs.offset += 28;
|
|
264
|
+
JSON.__serialize<boolean>(load<boolean>(ptr, offsetof<this>("isVerified")));
|
|
238
265
|
store<u16>(bs.offset, 125, 0);
|
|
239
266
|
bs.offset += 2;
|
|
240
267
|
}
|
|
241
268
|
|
|
242
|
-
|
|
243
269
|
@inline
|
|
244
270
|
__INITIALIZE(): this {
|
|
245
|
-
this
|
|
271
|
+
store<string>(changetype<usize>(this), "", offsetof<this>("lastName"));
|
|
272
|
+
store<Array<i32>>(changetype<usize>(this), [], offsetof<this>("lastActive"));
|
|
246
273
|
return this;
|
|
247
274
|
}
|
|
248
275
|
__DESERIALIZE<__JSON_T>(srcStart: usize, srcEnd: usize, out: __JSON_T): __JSON_T {
|
|
@@ -281,174 +308,28 @@ class PeopleData {
|
|
|
281
308
|
while (srcStart < srcEnd) {
|
|
282
309
|
const code = load<u16>(srcStart);
|
|
283
310
|
if (code == 34 && load<u16>(srcStart - 2) !== 92) {
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
srcStart += 2;
|
|
297
|
-
keyStart = 0;
|
|
298
|
-
break;
|
|
299
|
-
}
|
|
300
|
-
srcStart += 2;
|
|
301
|
-
}
|
|
302
|
-
} else if (code == 123) {
|
|
303
|
-
lastIndex = srcStart;
|
|
304
|
-
depth++;
|
|
305
|
-
srcStart += 2;
|
|
306
|
-
while (srcStart < srcEnd) {
|
|
307
|
-
const code = load<u16>(srcStart);
|
|
308
|
-
if (code == 34) {
|
|
309
|
-
srcStart += 2;
|
|
310
|
-
while (!(load<u16>(srcStart) == 34 && load<u16>(srcStart - 2) != 92)) srcStart += 2;
|
|
311
|
-
} else if (code == 125) {
|
|
312
|
-
if (--depth == 0) {
|
|
313
|
-
srcStart += 2;
|
|
314
|
-
keyStart = 0;
|
|
315
|
-
break;
|
|
316
|
-
}
|
|
317
|
-
} else if (code == 123) depth++;
|
|
318
|
-
srcStart += 2;
|
|
319
|
-
}
|
|
320
|
-
} else if (code == 91) {
|
|
321
|
-
lastIndex = srcStart;
|
|
322
|
-
depth++;
|
|
323
|
-
srcStart += 2;
|
|
324
|
-
while (srcStart < srcEnd) {
|
|
325
|
-
const code = load<u16>(srcStart);
|
|
326
|
-
if (code == 34) {
|
|
327
|
-
srcStart += 2;
|
|
328
|
-
while (!(load<u16>(srcStart) == 34 && load<u16>(srcStart - 2) != 92)) srcStart += 2;
|
|
329
|
-
} else if (code == 93) {
|
|
330
|
-
if (--depth == 0) {
|
|
331
|
-
srcStart += 2;
|
|
332
|
-
switch (<u32>keyEnd - <u32>keyStart) {
|
|
333
|
-
case 12: {
|
|
334
|
-
const codeS8 = load<u64>(keyStart, 0);
|
|
335
|
-
const codeS12 = load<u32>(keyStart, 8);
|
|
336
|
-
if (codeS8 == 31525674139582576 && codeS12 == 6619244) {
|
|
337
|
-
store<Array<Person>>(changetype<usize>(out), JSON.__deserialize<Array<Person>>(lastIndex, srcStart), offsetof<this>("people"));
|
|
338
|
-
keyStart = 0;
|
|
339
|
-
break;
|
|
340
|
-
} else {
|
|
341
|
-
keyStart = 0;
|
|
342
|
-
break;
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
default: {
|
|
311
|
+
switch (<u32>keyEnd - <u32>keyStart) {
|
|
312
|
+
case 20: {
|
|
313
|
+
const codeS8 = load<u64>(keyStart, 0);
|
|
314
|
+
const codeS16 = load<u64>(keyStart, 8);
|
|
315
|
+
const codeS20 = load<u32>(keyStart, 16);
|
|
316
|
+
if (codeS8 == 32370111954878566 && codeS16 == 27303545189433460 && codeS20 == 6619245) {
|
|
317
|
+
store<string | null>(changetype<usize>(out), JSON.__deserialize<string | null>(lastIndex, srcStart + 2), offsetof<this>("firstName"));
|
|
318
|
+
srcStart += 4;
|
|
319
|
+
keyStart = 0;
|
|
320
|
+
break;
|
|
321
|
+
} else {
|
|
322
|
+
srcStart += 4;
|
|
347
323
|
keyStart = 0;
|
|
348
324
|
break;
|
|
349
325
|
}
|
|
350
326
|
}
|
|
351
|
-
break;
|
|
352
|
-
}
|
|
353
|
-
} else if (code == 91) depth++;
|
|
354
|
-
srcStart += 2;
|
|
355
|
-
}
|
|
356
|
-
} else if (code == 116) {
|
|
357
|
-
if (load<u64>(srcStart) == 28429475166421108) {
|
|
358
|
-
srcStart += 8;
|
|
359
|
-
srcStart += 2;
|
|
360
|
-
keyStart = 0;
|
|
361
|
-
} else {
|
|
362
|
-
throw new Error("Expected to find 'true' but found '" + JSON.Util.ptrToStr(lastIndex, srcStart) + "' instead at position " + (srcEnd - srcStart).toString());
|
|
363
|
-
}
|
|
364
|
-
} else if (code == 102) {
|
|
365
|
-
if (load<u64>(srcStart, 2) == 28429466576093281) {
|
|
366
|
-
srcStart += 10;
|
|
367
|
-
srcStart += 2;
|
|
368
|
-
keyStart = 0;
|
|
369
|
-
} else {
|
|
370
|
-
throw new Error("Expected to find 'false' but found '" + JSON.Util.ptrToStr(lastIndex, srcStart) + "' instead at position " + (srcEnd - srcStart).toString());
|
|
371
|
-
}
|
|
372
|
-
} else if (code == 110) {
|
|
373
|
-
if (load<u64>(srcStart) == 30399761348886638) {
|
|
374
|
-
srcStart += 8;
|
|
375
|
-
srcStart += 2;
|
|
376
|
-
keyStart = 0;
|
|
377
|
-
}
|
|
378
|
-
} else {
|
|
379
|
-
srcStart += 2;
|
|
380
|
-
keyStart = 0;
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
return out;
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
|
|
388
327
|
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
store<u64>(bs.offset, 27303502239891579, 0);
|
|
395
|
-
store<u64>(bs.offset, 16325694684463220, 8);
|
|
396
|
-
bs.offset += 16;
|
|
397
|
-
JSON.__serialize<T | null>(load<T | null>(ptr, offsetof<this>("data")));
|
|
398
|
-
store<u16>(bs.offset, 125, 0);
|
|
399
|
-
bs.offset += 2;
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
@inline
|
|
404
|
-
__INITIALIZE(): this {
|
|
405
|
-
if (isManaged<nonnull<T | null>>() || isReference<nonnull<T | null>>()) {
|
|
406
|
-
this.data = changetype<nonnull<T | null>>(__new(offsetof<nonnull<T | null>>(), idof<nonnull<T | null>>()));
|
|
407
|
-
if (isDefined(this.data.__INITIALIZE)) changetype<nonnull<T | null>>(this.data).__INITIALIZE();
|
|
408
|
-
}
|
|
409
|
-
return this;
|
|
410
|
-
}
|
|
411
|
-
__DESERIALIZE<__JSON_T>(srcStart: usize, srcEnd: usize, out: __JSON_T): __JSON_T {
|
|
412
|
-
let keyStart: usize = 0;
|
|
413
|
-
let keyEnd: usize = 0;
|
|
414
|
-
let isKey = false;
|
|
415
|
-
let depth: i32 = 0;
|
|
416
|
-
let lastIndex: usize = 0;
|
|
417
|
-
while (srcStart < srcEnd && JSON.Util.isSpace(load<u16>(srcStart))) srcStart += 2;
|
|
418
|
-
while (srcEnd > srcStart && JSON.Util.isSpace(load<u16>(srcEnd - 2))) srcEnd -= 2;
|
|
419
|
-
if (srcStart - srcEnd == 0) throw new Error("Input string had zero length or was all whitespace");
|
|
420
|
-
if (load<u16>(srcStart) != 123) throw new Error("Expected '{' at start of object at position " + (srcEnd - srcStart).toString());
|
|
421
|
-
if (load<u16>(srcEnd - 2) != 125) throw new Error("Expected '}' at end of object at position " + (srcEnd - srcStart).toString());
|
|
422
|
-
srcStart += 2;
|
|
423
|
-
while (srcStart < srcEnd) {
|
|
424
|
-
let code = load<u16>(srcStart);
|
|
425
|
-
while (JSON.Util.isSpace(code)) code = load<u16>((srcStart += 2));
|
|
426
|
-
if (keyStart == 0) {
|
|
427
|
-
if (code == 34 && load<u16>(srcStart - 2) !== 92) {
|
|
428
|
-
if (isKey) {
|
|
429
|
-
keyStart = lastIndex;
|
|
430
|
-
keyEnd = srcStart;
|
|
431
|
-
while (JSON.Util.isSpace((code = load<u16>((srcStart += 2))))) {}
|
|
432
|
-
if (code !== 58) throw new Error("Expected ':' after key at position " + (srcEnd - srcStart).toString());
|
|
433
|
-
isKey = false;
|
|
434
|
-
} else {
|
|
435
|
-
isKey = true;
|
|
436
|
-
lastIndex = srcStart + 2;
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
srcStart += 2;
|
|
440
|
-
} else {
|
|
441
|
-
if (code == 34) {
|
|
442
|
-
lastIndex = srcStart;
|
|
443
|
-
srcStart += 2;
|
|
444
|
-
while (srcStart < srcEnd) {
|
|
445
|
-
const code = load<u16>(srcStart);
|
|
446
|
-
if (code == 34 && load<u16>(srcStart - 2) !== 92) {
|
|
447
|
-
switch (<u32>keyEnd - <u32>keyStart) {
|
|
448
|
-
case 8: {
|
|
449
|
-
const code64 = load<u64>(keyStart);
|
|
450
|
-
if (isString<T | null>() && code64 == 27303570963497060) {
|
|
451
|
-
store<T | null>(changetype<usize>(out), JSON.__deserialize<T | null>(lastIndex, srcStart + 2), offsetof<this>("data"));
|
|
328
|
+
case 16: {
|
|
329
|
+
const codeS8 = load<u64>(keyStart, 0);
|
|
330
|
+
const codeS16 = load<u64>(keyStart, 8);
|
|
331
|
+
if (codeS8 == 32651591226032236 && codeS16 == 28429440805568590) {
|
|
332
|
+
store<string>(changetype<usize>(out), JSON.__deserialize<string>(lastIndex, srcStart + 2), offsetof<this>("lastName"));
|
|
452
333
|
srcStart += 4;
|
|
453
334
|
keyStart = 0;
|
|
454
335
|
break;
|
|
@@ -476,10 +357,10 @@ export class Response<T> {
|
|
|
476
357
|
const code = load<u16>(srcStart);
|
|
477
358
|
if (code == 44 || code == 125 || JSON.Util.isSpace(code)) {
|
|
478
359
|
switch (<u32>keyEnd - <u32>keyStart) {
|
|
479
|
-
case
|
|
480
|
-
const
|
|
481
|
-
if (
|
|
482
|
-
store<
|
|
360
|
+
case 6: {
|
|
361
|
+
const code48 = load<u64>(keyStart) & 281474976710655;
|
|
362
|
+
if (code48 == 433798447201) {
|
|
363
|
+
store<i32>(changetype<usize>(out), JSON.__deserialize<i32>(lastIndex, srcStart), offsetof<this>("age"));
|
|
483
364
|
srcStart += 2;
|
|
484
365
|
keyStart = 0;
|
|
485
366
|
break;
|
|
@@ -513,10 +394,49 @@ export class Response<T> {
|
|
|
513
394
|
if (--depth == 0) {
|
|
514
395
|
srcStart += 2;
|
|
515
396
|
switch (<u32>keyEnd - <u32>keyStart) {
|
|
516
|
-
case
|
|
517
|
-
const
|
|
518
|
-
|
|
519
|
-
|
|
397
|
+
case 20: {
|
|
398
|
+
const codeS8 = load<u64>(keyStart, 0);
|
|
399
|
+
const codeS16 = load<u64>(keyStart, 8);
|
|
400
|
+
const codeS20 = load<u32>(keyStart, 16);
|
|
401
|
+
if (codeS8 == 32370111954878566 && codeS16 == 27303545189433460 && codeS20 == 6619245) {
|
|
402
|
+
store<string | null>(changetype<usize>(out), JSON.__deserialize<string | null>(lastIndex, srcStart), offsetof<this>("firstName"));
|
|
403
|
+
keyStart = 0;
|
|
404
|
+
break;
|
|
405
|
+
} else if (codeS8 == 32651591226032236 && codeS16 == 29555370777313345 && codeS20 == 6619254) {
|
|
406
|
+
store<Array<i32>>(changetype<usize>(out), JSON.__deserialize<Array<i32>>(lastIndex, srcStart), offsetof<this>("lastActive"));
|
|
407
|
+
keyStart = 0;
|
|
408
|
+
break;
|
|
409
|
+
} else if (codeS8 == 28429342022500457 && codeS16 == 29555310648164466 && codeS20 == 6553701) {
|
|
410
|
+
store<boolean>(changetype<usize>(out), JSON.__deserialize<boolean>(lastIndex, srcStart), offsetof<this>("isVerified"));
|
|
411
|
+
keyStart = 0;
|
|
412
|
+
break;
|
|
413
|
+
} else {
|
|
414
|
+
keyStart = 0;
|
|
415
|
+
break;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
case 6: {
|
|
420
|
+
const code48 = load<u64>(keyStart) & 281474976710655;
|
|
421
|
+
if (code48 == 433798447201) {
|
|
422
|
+
store<i32>(changetype<usize>(out), JSON.__deserialize<i32>(lastIndex, srcStart), offsetof<this>("age"));
|
|
423
|
+
keyStart = 0;
|
|
424
|
+
break;
|
|
425
|
+
} else if (code48 == 493928513648) {
|
|
426
|
+
store<Vec3 | null>(changetype<usize>(out), JSON.__deserialize<Vec3 | null>(lastIndex, srcStart), offsetof<this>("pos"));
|
|
427
|
+
keyStart = 0;
|
|
428
|
+
break;
|
|
429
|
+
} else {
|
|
430
|
+
keyStart = 0;
|
|
431
|
+
break;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
case 16: {
|
|
436
|
+
const codeS8 = load<u64>(keyStart, 0);
|
|
437
|
+
const codeS16 = load<u64>(keyStart, 8);
|
|
438
|
+
if (codeS8 == 32651591226032236 && codeS16 == 28429440805568590) {
|
|
439
|
+
store<string>(changetype<usize>(out), JSON.__deserialize<string>(lastIndex, srcStart), offsetof<this>("lastName"));
|
|
520
440
|
keyStart = 0;
|
|
521
441
|
break;
|
|
522
442
|
} else {
|
|
@@ -548,10 +468,12 @@ export class Response<T> {
|
|
|
548
468
|
if (--depth == 0) {
|
|
549
469
|
srcStart += 2;
|
|
550
470
|
switch (<u32>keyEnd - <u32>keyStart) {
|
|
551
|
-
case
|
|
552
|
-
const
|
|
553
|
-
|
|
554
|
-
|
|
471
|
+
case 20: {
|
|
472
|
+
const codeS8 = load<u64>(keyStart, 0);
|
|
473
|
+
const codeS16 = load<u64>(keyStart, 8);
|
|
474
|
+
const codeS20 = load<u32>(keyStart, 16);
|
|
475
|
+
if (codeS8 == 32651591226032236 && codeS16 == 29555370777313345 && codeS20 == 6619254) {
|
|
476
|
+
store<Array<i32>>(changetype<usize>(out), JSON.__deserialize<Array<i32>>(lastIndex, srcStart), offsetof<this>("lastActive"));
|
|
555
477
|
keyStart = 0;
|
|
556
478
|
break;
|
|
557
479
|
} else {
|
|
@@ -574,10 +496,12 @@ export class Response<T> {
|
|
|
574
496
|
if (load<u64>(srcStart) == 28429475166421108) {
|
|
575
497
|
srcStart += 8;
|
|
576
498
|
switch (<u32>keyEnd - <u32>keyStart) {
|
|
577
|
-
case
|
|
578
|
-
const
|
|
579
|
-
|
|
580
|
-
|
|
499
|
+
case 20: {
|
|
500
|
+
const codeS8 = load<u64>(keyStart, 0);
|
|
501
|
+
const codeS16 = load<u64>(keyStart, 8);
|
|
502
|
+
const codeS20 = load<u32>(keyStart, 16);
|
|
503
|
+
if (codeS8 == 28429342022500457 && codeS16 == 29555310648164466 && codeS20 == 6553701) {
|
|
504
|
+
store<boolean>(changetype<usize>(out), true, offsetof<this>("isVerified"));
|
|
581
505
|
srcStart += 2;
|
|
582
506
|
keyStart = 0;
|
|
583
507
|
break;
|
|
@@ -600,10 +524,12 @@ export class Response<T> {
|
|
|
600
524
|
if (load<u64>(srcStart, 2) == 28429466576093281) {
|
|
601
525
|
srcStart += 10;
|
|
602
526
|
switch (<u32>keyEnd - <u32>keyStart) {
|
|
603
|
-
case
|
|
604
|
-
const
|
|
605
|
-
|
|
606
|
-
|
|
527
|
+
case 20: {
|
|
528
|
+
const codeS8 = load<u64>(keyStart, 0);
|
|
529
|
+
const codeS16 = load<u64>(keyStart, 8);
|
|
530
|
+
const codeS20 = load<u32>(keyStart, 16);
|
|
531
|
+
if (codeS8 == 28429342022500457 && codeS16 == 29555310648164466 && codeS20 == 6553701) {
|
|
532
|
+
store<boolean>(changetype<usize>(out), false, offsetof<this>("isVerified"));
|
|
607
533
|
srcStart += 2;
|
|
608
534
|
keyStart = 0;
|
|
609
535
|
break;
|
|
@@ -626,10 +552,26 @@ export class Response<T> {
|
|
|
626
552
|
if (load<u64>(srcStart) == 30399761348886638) {
|
|
627
553
|
srcStart += 8;
|
|
628
554
|
switch (<u32>keyEnd - <u32>keyStart) {
|
|
629
|
-
case
|
|
630
|
-
const
|
|
631
|
-
if (
|
|
632
|
-
store<usize>(changetype<usize>(out), 0, offsetof<this>("
|
|
555
|
+
case 6: {
|
|
556
|
+
const code48 = load<u64>(keyStart) & 281474976710655;
|
|
557
|
+
if (code48 == 493928513648) {
|
|
558
|
+
store<usize>(changetype<usize>(out), 0, offsetof<this>("pos"));
|
|
559
|
+
srcStart += 2;
|
|
560
|
+
keyStart = 0;
|
|
561
|
+
break;
|
|
562
|
+
} else {
|
|
563
|
+
srcStart += 2;
|
|
564
|
+
keyStart = 0;
|
|
565
|
+
break;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
case 20: {
|
|
570
|
+
const codeS8 = load<u64>(keyStart, 0);
|
|
571
|
+
const codeS16 = load<u64>(keyStart, 8);
|
|
572
|
+
const codeS20 = load<u32>(keyStart, 16);
|
|
573
|
+
if (codeS8 == 32370111954878566 && codeS16 == 27303545189433460 && codeS20 == 6619245) {
|
|
574
|
+
store<usize>(changetype<usize>(out), 0, offsetof<this>("firstName"));
|
|
633
575
|
srcStart += 2;
|
|
634
576
|
keyStart = 0;
|
|
635
577
|
break;
|
|
@@ -655,6 +597,18 @@ export class Response<T> {
|
|
|
655
597
|
return out;
|
|
656
598
|
}
|
|
657
599
|
}
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
600
|
+
const player: Player = {
|
|
601
|
+
lastName: "Tanaka",
|
|
602
|
+
lastActive: [3, 9, 2025],
|
|
603
|
+
age: 18,
|
|
604
|
+
pos: {
|
|
605
|
+
x: 3.4,
|
|
606
|
+
y: 1.2,
|
|
607
|
+
z: 8.3,
|
|
608
|
+
},
|
|
609
|
+
isVerified: true,
|
|
610
|
+
};
|
|
611
|
+
const serialized = JSON.stringify<Player>(player);
|
|
612
|
+
const deserialized = JSON.parse<Player>(serialized);
|
|
613
|
+
console.log("Serialized " + serialized);
|
|
614
|
+
console.log("Deserialized " + JSON.stringify(deserialized));
|