json-as 1.3.6 → 1.3.7

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 (106) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/assembly/deserialize/helpers/uint.ts +4 -1
  3. package/assembly/deserialize/index/arbitrary.ts +5 -1
  4. package/assembly/deserialize/index/array.ts +13 -3
  5. package/assembly/deserialize/index/integer.ts +68 -1
  6. package/assembly/deserialize/index/string.ts +4 -1
  7. package/assembly/deserialize/index/typedarray.ts +13 -3
  8. package/assembly/deserialize/index/unsigned.ts +78 -1
  9. package/assembly/deserialize/simd/array/integer.ts +327 -50
  10. package/assembly/deserialize/simd/integer.ts +233 -0
  11. package/assembly/deserialize/simd/string.ts +45 -11
  12. package/assembly/deserialize/simple/arbitrary.ts +11 -4
  13. package/assembly/deserialize/simple/array/arbitrary.ts +24 -5
  14. package/assembly/deserialize/simple/array/array.ts +8 -2
  15. package/assembly/deserialize/simple/array/bool.ts +38 -7
  16. package/assembly/deserialize/simple/array/box.ts +8 -2
  17. package/assembly/deserialize/simple/array/float.ts +36 -9
  18. package/assembly/deserialize/simple/array/generic.ts +12 -4
  19. package/assembly/deserialize/simple/array/integer.ts +8 -2
  20. package/assembly/deserialize/simple/array/map.ts +26 -6
  21. package/assembly/deserialize/simple/array/object.ts +26 -6
  22. package/assembly/deserialize/simple/array/raw.ts +34 -7
  23. package/assembly/deserialize/simple/array/string.ts +8 -2
  24. package/assembly/deserialize/simple/array/struct.ts +26 -6
  25. package/assembly/deserialize/simple/array.ts +13 -3
  26. package/assembly/deserialize/simple/bool.ts +6 -2
  27. package/assembly/deserialize/simple/float.ts +6 -1
  28. package/assembly/deserialize/simple/integer.ts +10 -2
  29. package/assembly/deserialize/simple/map.ts +95 -22
  30. package/assembly/deserialize/simple/object.ts +63 -14
  31. package/assembly/deserialize/simple/raw.ts +4 -1
  32. package/assembly/deserialize/simple/set.ts +59 -14
  33. package/assembly/deserialize/simple/staticarray/string.ts +11 -3
  34. package/assembly/deserialize/simple/staticarray.ts +64 -14
  35. package/assembly/deserialize/simple/string.ts +5 -92
  36. package/assembly/deserialize/simple/struct.ts +5 -1
  37. package/assembly/deserialize/simple/typedarray.ts +16 -3
  38. package/assembly/deserialize/simple/unsigned.ts +10 -15
  39. package/assembly/deserialize/swar/array/arbitrary.ts +5 -1
  40. package/assembly/deserialize/swar/array/array.ts +30 -6
  41. package/assembly/deserialize/swar/array/bool.ts +22 -4
  42. package/assembly/deserialize/swar/array/box.ts +5 -1
  43. package/assembly/deserialize/swar/array/float.ts +15 -3
  44. package/assembly/deserialize/swar/array/generic.ts +24 -7
  45. package/assembly/deserialize/swar/array/integer.ts +328 -84
  46. package/assembly/deserialize/swar/array/map.ts +5 -1
  47. package/assembly/deserialize/swar/array/object.ts +27 -7
  48. package/assembly/deserialize/swar/array/raw.ts +5 -1
  49. package/assembly/deserialize/swar/array/shared.ts +36 -11
  50. package/assembly/deserialize/swar/array/string.ts +20 -4
  51. package/assembly/deserialize/swar/array/struct.ts +27 -7
  52. package/assembly/deserialize/swar/array.ts +19 -4
  53. package/assembly/deserialize/swar/integer.ts +246 -0
  54. package/assembly/deserialize/swar/string.ts +98 -194
  55. package/assembly/index.d.ts +3 -1
  56. package/assembly/index.ts +312 -81
  57. package/assembly/serialize/index/float.ts +5 -1
  58. package/assembly/serialize/index/typedarray.ts +25 -7
  59. package/assembly/serialize/simd/string.ts +6 -2
  60. package/assembly/serialize/simple/array.ts +179 -1
  61. package/assembly/serialize/simple/float.ts +4 -1
  62. package/assembly/serialize/simple/integer.ts +8 -9
  63. package/assembly/serialize/simple/map.ts +6 -2
  64. package/assembly/serialize/simple/raw.ts +5 -1
  65. package/assembly/serialize/simple/set.ts +6 -1
  66. package/assembly/serialize/simple/staticarray.ts +6 -1
  67. package/assembly/serialize/simple/string.ts +0 -1
  68. package/assembly/serialize/simple/typedarray.ts +10 -3
  69. package/assembly/serialize/swar/string.ts +18 -5
  70. package/assembly/util/atoi-fast.ts +81 -0
  71. package/assembly/util/concat.ts +5 -1
  72. package/assembly/util/dragonbox-cache.ts +443 -2
  73. package/assembly/util/dragonbox.ts +43 -14
  74. package/assembly/util/itoa-fast.ts +230 -0
  75. package/assembly/util/masks.ts +18 -1
  76. package/assembly/util/parsefloat-fast.ts +167 -0
  77. package/assembly/util/simd-int.ts +191 -0
  78. package/assembly/util/snp.ts +4 -1
  79. package/assembly/util/swar-int.ts +248 -0
  80. package/assembly/util/swar.ts +13 -3
  81. package/lib/as-bs.ts +13 -5
  82. package/package.json +5 -2
  83. package/transform/lib/builder.d.ts.map +1 -1
  84. package/transform/lib/builder.js +13 -5
  85. package/transform/lib/builder.js.map +1 -1
  86. package/transform/lib/index.d.ts +1 -0
  87. package/transform/lib/index.d.ts.map +1 -1
  88. package/transform/lib/index.js +1030 -241
  89. package/transform/lib/index.js.map +1 -1
  90. package/transform/lib/linkers/alias.d.ts.map +1 -1
  91. package/transform/lib/linkers/alias.js.map +1 -1
  92. package/transform/lib/linkers/custom.d.ts.map +1 -1
  93. package/transform/lib/linkers/custom.js +3 -2
  94. package/transform/lib/linkers/custom.js.map +1 -1
  95. package/transform/lib/linkers/imports.d.ts.map +1 -1
  96. package/transform/lib/linkers/imports.js.map +1 -1
  97. package/transform/lib/types.d.ts.map +1 -1
  98. package/transform/lib/types.js +54 -16
  99. package/transform/lib/types.js.map +1 -1
  100. package/transform/lib/util.d.ts.map +1 -1
  101. package/transform/lib/util.js +1 -1
  102. package/transform/lib/util.js.map +1 -1
  103. package/transform/lib/visitor.d.ts.map +1 -1
  104. package/transform/lib/visitor.js +2 -1
  105. package/transform/lib/visitor.js.map +1 -1
  106. package/assembly/custom/util.ts +0 -310
@@ -1,6 +1,18 @@
1
1
  import { JSON } from "../..";
2
2
  import { bs } from "../../../lib/as-bs";
3
- import { BACK_SLASH, COMMA, CHAR_F, BRACE_LEFT, BRACKET_LEFT, CHAR_N, QUOTE, BRACE_RIGHT, BRACKET_RIGHT, CHAR_T, COLON } from "../../custom/chars";
3
+ import {
4
+ BACK_SLASH,
5
+ COMMA,
6
+ CHAR_F,
7
+ BRACE_LEFT,
8
+ BRACKET_LEFT,
9
+ CHAR_N,
10
+ QUOTE,
11
+ BRACE_RIGHT,
12
+ BRACKET_RIGHT,
13
+ CHAR_T,
14
+ COLON,
15
+ } from "../../custom/chars";
4
16
  import { isSpace, isUnescapedQuote, scanStringEnd } from "../../util";
5
17
  import { ptrToStr } from "../../util/ptrToStr";
6
18
  import { deserializeString_SWAR } from "../swar/string";
@@ -10,7 +22,11 @@ import { deserializeBoolean } from "./bool";
10
22
  import { deserializeFloat } from "./float";
11
23
  import { deserializeString } from "./string";
12
24
 
13
- export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): JSON.Obj {
25
+ export function deserializeObject(
26
+ srcStart: usize,
27
+ srcEnd: usize,
28
+ dst: usize,
29
+ ): JSON.Obj {
14
30
  const out = changetype<JSON.Obj>(dst || changetype<usize>(new JSON.Obj()));
15
31
 
16
32
  let keyStart: usize = 0;
@@ -22,9 +38,18 @@ export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): J
22
38
  while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
23
39
  while (srcEnd > srcStart && isSpace(load<u16>(srcEnd - 2))) srcEnd -= 2; // would like to optimize this later
24
40
 
25
- if (srcStart - srcEnd == 0) throw new Error("Input string had zero length or was all whitespace");
26
- if (load<u16>(srcStart) != BRACE_LEFT) throw new Error("Expected '{' at start of object at position " + (srcEnd - srcStart).toString());
27
- if (load<u16>(srcEnd - 2) != BRACE_RIGHT) throw new Error("Expected '}' at end of object at position " + (srcEnd - srcStart).toString());
41
+ if (srcStart - srcEnd == 0)
42
+ throw new Error("Input string had zero length or was all whitespace");
43
+ if (load<u16>(srcStart) != BRACE_LEFT)
44
+ throw new Error(
45
+ "Expected '{' at start of object at position " +
46
+ (srcEnd - srcStart).toString(),
47
+ );
48
+ if (load<u16>(srcEnd - 2) != BRACE_RIGHT)
49
+ throw new Error(
50
+ "Expected '}' at end of object at position " +
51
+ (srcEnd - srcStart).toString(),
52
+ );
28
53
 
29
54
  srcStart += 2;
30
55
  while (srcStart < srcEnd) {
@@ -37,7 +62,11 @@ export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): J
37
62
  // console.log("Key: " + ptrToStr(lastIndex, srcStart));
38
63
  // console.log("Next: " + String.fromCharCode(load<u16>(srcStart + 2)));
39
64
  while (isSpace((code = load<u16>((srcStart += 2))))) {}
40
- if (code !== COLON) throw new Error("Expected ':' after key at position " + (srcEnd - srcStart).toString());
65
+ if (code !== COLON)
66
+ throw new Error(
67
+ "Expected ':' after key at position " +
68
+ (srcEnd - srcStart).toString(),
69
+ );
41
70
  isKey = false;
42
71
  } else {
43
72
  // console.log("Got key start");
@@ -51,8 +80,12 @@ export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): J
51
80
  if (code == QUOTE) {
52
81
  lastIndex = srcStart;
53
82
  srcStart = scanStringEnd(srcStart, srcEnd);
54
- if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
55
- out.set(ptrToStr(keyStart, keyEnd), deserializeString(lastIndex, srcStart + 2));
83
+ if (srcStart >= srcEnd)
84
+ throw new Error("Unterminated string in JSON object");
85
+ out.set(
86
+ ptrToStr(keyStart, keyEnd),
87
+ deserializeString(lastIndex, srcStart + 2),
88
+ );
56
89
  srcStart += 2;
57
90
  keyStart = 0;
58
91
  continue;
@@ -63,7 +96,10 @@ export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): J
63
96
  const code = load<u16>(srcStart);
64
97
  if (code == COMMA || code == BRACE_RIGHT || isSpace(code)) {
65
98
  // console.log("Value (number): " + ptrToStr(lastIndex, srcStart));
66
- out.set(ptrToStr(keyStart, keyEnd), deserializeFloat<f64>(lastIndex, srcStart));
99
+ out.set(
100
+ ptrToStr(keyStart, keyEnd),
101
+ deserializeFloat<f64>(lastIndex, srcStart),
102
+ );
67
103
  // while (isSpace(load<u16>((srcStart += 2)))) {
68
104
  // /* empty */
69
105
  // }
@@ -82,11 +118,15 @@ export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): J
82
118
  const code = load<u16>(srcStart);
83
119
  if (code == QUOTE) {
84
120
  srcStart = scanStringEnd(srcStart, srcEnd);
85
- if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
121
+ if (srcStart >= srcEnd)
122
+ throw new Error("Unterminated string in JSON object");
86
123
  } else if (code == BRACE_RIGHT) {
87
124
  if (--depth == 0) {
88
125
  // console.log("Value (object): " + ptrToStr(lastIndex, srcStart + 2));
89
- out.set(ptrToStr(keyStart, keyEnd), deserializeObject(lastIndex, (srcStart += 2), 0));
126
+ out.set(
127
+ ptrToStr(keyStart, keyEnd),
128
+ deserializeObject(lastIndex, (srcStart += 2), 0),
129
+ );
90
130
  // console.log("Next: " + String.fromCharCode(load<u16>(srcStart)));
91
131
  keyStart = 0;
92
132
  // while (isSpace(load<u16>(srcStart))) {
@@ -105,11 +145,15 @@ export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): J
105
145
  const code = load<u16>(srcStart);
106
146
  if (code == QUOTE) {
107
147
  srcStart = scanStringEnd(srcStart, srcEnd);
108
- if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
148
+ if (srcStart >= srcEnd)
149
+ throw new Error("Unterminated string in JSON object");
109
150
  } else if (code == BRACKET_RIGHT) {
110
151
  if (--depth == 0) {
111
152
  // console.log("Value (array): " + ptrToStr(lastIndex, srcStart + 2));
112
- out.set(ptrToStr(keyStart, keyEnd), deserializeArray<JSON.Value[]>(lastIndex, (srcStart += 2), 0));
153
+ out.set(
154
+ ptrToStr(keyStart, keyEnd),
155
+ deserializeArray<JSON.Value[]>(lastIndex, (srcStart += 2), 0),
156
+ );
113
157
  // console.log("Next: " + String.fromCharCode(load<u16>(srcStart)));
114
158
  keyStart = 0;
115
159
  // while (isSpace(load<u16>((srcStart += 2)))) {
@@ -159,7 +203,12 @@ export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): J
159
203
  } else if (isSpace(code)) {
160
204
  srcStart += 2;
161
205
  } else {
162
- throw new Error("Unexpected character in JSON object '" + String.fromCharCode(code) + "' at position " + (srcEnd - srcStart).toString());
206
+ throw new Error(
207
+ "Unexpected character in JSON object '" +
208
+ String.fromCharCode(code) +
209
+ "' at position " +
210
+ (srcEnd - srcStart).toString(),
211
+ );
163
212
  }
164
213
  }
165
214
  }
@@ -2,6 +2,9 @@ import { JSON } from "../..";
2
2
  import { ptrToStr } from "../../util/ptrToStr";
3
3
 
4
4
  // @ts-ignore: inline
5
- @inline export function deserializeRaw(srcStart: usize, srcEnd: usize): JSON.Raw {
5
+ @inline export function deserializeRaw(
6
+ srcStart: usize,
7
+ srcEnd: usize,
8
+ ): JSON.Raw {
6
9
  return JSON.Raw.from(ptrToStr(srcStart, srcEnd));
7
10
  }
@@ -1,5 +1,14 @@
1
1
  import { JSON } from "../..";
2
- import { BRACKET_LEFT, BRACKET_RIGHT, BRACE_LEFT, BRACE_RIGHT, CHAR_F, CHAR_T, COMMA, QUOTE } from "../../custom/chars";
2
+ import {
3
+ BRACKET_LEFT,
4
+ BRACKET_RIGHT,
5
+ BRACE_LEFT,
6
+ BRACE_RIGHT,
7
+ CHAR_F,
8
+ CHAR_T,
9
+ COMMA,
10
+ QUOTE,
11
+ } from "../../custom/chars";
3
12
  import { isSpace, atoi, scanStringEnd } from "../../util";
4
13
 
5
14
  // @ts-expect-error: Decorator valid here
@@ -41,16 +50,24 @@ import { isSpace, atoi, scanStringEnd } from "../../util";
41
50
  return 0;
42
51
  }
43
52
 
44
- function deserializeSetDirect<T extends Set<any>>(srcStart: usize, srcEnd: usize, out: nonnull<T>, allowWhitespace: bool = false): usize {
45
- if (srcStart >= srcEnd || load<u16>(srcStart) != BRACKET_LEFT) throw new Error("Expected '[' at start of set");
53
+ function deserializeSetDirect<T extends Set<any>>(
54
+ srcStart: usize,
55
+ srcEnd: usize,
56
+ out: nonnull<T>,
57
+ allowWhitespace: bool = false,
58
+ ): usize {
59
+ if (srcStart >= srcEnd || load<u16>(srcStart) != BRACKET_LEFT)
60
+ throw new Error("Expected '[' at start of set");
46
61
 
47
62
  srcStart += 2;
48
- if (allowWhitespace) while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
63
+ if (allowWhitespace)
64
+ while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
49
65
  if (srcStart >= srcEnd) throw new Error("Unterminated set");
50
66
  if (load<u16>(srcStart) == BRACKET_RIGHT) return srcStart + 2;
51
67
 
52
68
  while (srcStart < srcEnd) {
53
- if (allowWhitespace) while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
69
+ if (allowWhitespace)
70
+ while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
54
71
  const code = load<u16>(srcStart);
55
72
 
56
73
  // @ts-ignore: type
@@ -80,7 +97,12 @@ function deserializeSetDirect<T extends Set<any>>(srcStart: usize, srcEnd: usize
80
97
  let ptr = srcStart + 2;
81
98
  while (ptr < srcEnd) {
82
99
  const next = load<u16>(ptr);
83
- if (next == COMMA || next == BRACKET_RIGHT || (allowWhitespace && isSpace(next))) break;
100
+ if (
101
+ next == COMMA ||
102
+ next == BRACKET_RIGHT ||
103
+ (allowWhitespace && isSpace(next))
104
+ )
105
+ break;
84
106
  ptr += 2;
85
107
  }
86
108
  // @ts-ignore: type
@@ -92,7 +114,12 @@ function deserializeSetDirect<T extends Set<any>>(srcStart: usize, srcEnd: usize
92
114
  let ptr = srcStart + 2;
93
115
  while (ptr < srcEnd) {
94
116
  const next = load<u16>(ptr);
95
- if (next == COMMA || next == BRACKET_RIGHT || (allowWhitespace && isSpace(next))) break;
117
+ if (
118
+ next == COMMA ||
119
+ next == BRACKET_RIGHT ||
120
+ (allowWhitespace && isSpace(next))
121
+ )
122
+ break;
96
123
  ptr += 2;
97
124
  }
98
125
  // @ts-ignore: type
@@ -109,12 +136,14 @@ function deserializeSetDirect<T extends Set<any>>(srcStart: usize, srcEnd: usize
109
136
  break;
110
137
  }
111
138
 
112
- if (allowWhitespace) while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
139
+ if (allowWhitespace)
140
+ while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
113
141
  if (srcStart >= srcEnd) break;
114
142
  const next = load<u16>(srcStart);
115
143
  if (next == COMMA) {
116
144
  srcStart += 2;
117
- if (allowWhitespace) while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
145
+ if (allowWhitespace)
146
+ while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
118
147
  continue;
119
148
  }
120
149
  if (next == BRACKET_RIGHT) return srcStart + 2;
@@ -124,27 +153,43 @@ function deserializeSetDirect<T extends Set<any>>(srcStart: usize, srcEnd: usize
124
153
  throw new Error("Failed to parse JSON!");
125
154
  }
126
155
 
127
- export function deserializeSet<T extends Set<any>>(srcStart: usize, srcEnd: usize, dst: usize): T {
128
- const out = changetype<nonnull<T>>(dst || changetype<usize>(instantiate<T>()));
156
+ export function deserializeSet<T extends Set<any>>(
157
+ srcStart: usize,
158
+ srcEnd: usize,
159
+ dst: usize,
160
+ ): T {
161
+ const out = changetype<nonnull<T>>(
162
+ dst || changetype<usize>(instantiate<T>()),
163
+ );
129
164
  out.clear();
130
165
 
131
166
  while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
132
167
  while (srcEnd > srcStart && isSpace(load<u16>(srcEnd - 2))) srcEnd -= 2;
133
168
 
134
- if (srcStart >= srcEnd) throw new Error("Input string had zero length or was all whitespace");
169
+ if (srcStart >= srcEnd)
170
+ throw new Error("Input string had zero length or was all whitespace");
135
171
  const end = deserializeSetDirect<T>(srcStart, srcEnd, out, true);
136
172
  if (end != srcEnd) throw new Error("Expected ']' at end of set");
137
173
  return out;
138
174
  }
139
175
 
140
176
  // @ts-expect-error: Decorator valid here
141
- @inline export function deserializeSetInto<T extends Set<any>>(srcStart: usize, srcEnd: usize, out: T): usize {
177
+ @inline export function deserializeSetInto<T extends Set<any>>(
178
+ srcStart: usize,
179
+ srcEnd: usize,
180
+ out: T,
181
+ ): usize {
142
182
  changetype<nonnull<T>>(out).clear();
143
183
  return deserializeSetDirect<T>(srcStart, srcEnd, changetype<nonnull<T>>(out));
144
184
  }
145
185
 
146
186
  // @ts-expect-error: Decorator valid here
147
- @inline export function deserializeSetField<T extends Set<any>>(srcStart: usize, srcEnd: usize, dstObj: usize, dstOffset: usize = 0): usize {
187
+ @inline export function deserializeSetField<T extends Set<any>>(
188
+ srcStart: usize,
189
+ srcEnd: usize,
190
+ dstObj: usize,
191
+ dstOffset: usize = 0,
192
+ ): usize {
148
193
  let out = load<T>(dstObj, dstOffset);
149
194
  if (!changetype<usize>(out)) {
150
195
  out = changetype<T>(instantiate<T>());
@@ -2,7 +2,11 @@ import { JSON } from "../../..";
2
2
  import { QUOTE } from "../../../custom/chars";
3
3
  import { isUnescapedQuote } from "../../../util";
4
4
 
5
- export function deserializeStaticArrayString(srcStart: usize, srcEnd: usize, dst: usize): StaticArray<string> {
5
+ export function deserializeStaticArrayString(
6
+ srcStart: usize,
7
+ srcEnd: usize,
8
+ dst: usize,
9
+ ): StaticArray<string> {
6
10
  // First pass: count elements using same logic as Array deserializer
7
11
  let count: i32 = 0;
8
12
  let ptr = srcStart;
@@ -22,7 +26,9 @@ export function deserializeStaticArrayString(srcStart: usize, srcEnd: usize, dst
22
26
 
23
27
  // Allocate StaticArray with correct size
24
28
  const outSize = (<usize>count) << alignof<string>();
25
- const out = changetype<StaticArray<string>>(dst || __new(outSize, idof<StaticArray<string>>()));
29
+ const out = changetype<StaticArray<string>>(
30
+ dst || __new(outSize, idof<StaticArray<string>>()),
31
+ );
26
32
 
27
33
  // Second pass: populate values
28
34
  let index = 0;
@@ -35,7 +41,9 @@ export function deserializeStaticArrayString(srcStart: usize, srcEnd: usize, dst
35
41
  inString = true;
36
42
  lastPos = srcStart;
37
43
  } else if (isUnescapedQuote(srcStart)) {
38
- unchecked((out[index++] = JSON.__deserialize<string>(lastPos, srcStart + 2)));
44
+ unchecked(
45
+ (out[index++] = JSON.__deserialize<string>(lastPos, srcStart + 2)),
46
+ );
39
47
  inString = false;
40
48
  }
41
49
  }
@@ -18,7 +18,10 @@ import { deserializeStaticArrayString } from "./staticarray/string";
18
18
  import { scanValueEnd } from "../swar/array/shared";
19
19
 
20
20
 
21
- @inline function materializeStaticArray<T extends StaticArray<any>>(src: valueof<T>[], dst: usize): T {
21
+ @inline function materializeStaticArray<T extends StaticArray<any>>(
22
+ src: valueof<T>[],
23
+ dst: usize,
24
+ ): T {
22
25
  const byteLength = <usize>src.length * sizeof<valueof<T>>();
23
26
  let out = dst;
24
27
 
@@ -35,7 +38,11 @@ import { scanValueEnd } from "../swar/array/shared";
35
38
  return typed;
36
39
  }
37
40
 
38
- export function deserializeStaticArray<T extends StaticArray<any>>(srcStart: usize, srcEnd: usize, dst: usize): T {
41
+ export function deserializeStaticArray<T extends StaticArray<any>>(
42
+ srcStart: usize,
43
+ srcEnd: usize,
44
+ dst: usize,
45
+ ): T {
39
46
  if (isString<valueof<T>>()) {
40
47
  return changetype<T>(deserializeStaticArrayString(srcStart, srcEnd, dst));
41
48
  } else if (isBoolean<valueof<T>>()) {
@@ -45,27 +52,61 @@ export function deserializeStaticArray<T extends StaticArray<any>>(srcStart: usi
45
52
  } else if (isFloat<valueof<T>>()) {
46
53
  return deserializeStaticArrayFloat<T>(srcStart, srcEnd, dst);
47
54
  } else if (isArray<valueof<T>>()) {
48
- return materializeStaticArray<T>(deserializeArrayArray<valueof<T>[]>(srcStart, srcEnd, 0), dst);
55
+ return materializeStaticArray<T>(
56
+ deserializeArrayArray<valueof<T>[]>(srcStart, srcEnd, 0),
57
+ dst,
58
+ );
49
59
  } else if (isManaged<valueof<T>>() || isReference<valueof<T>>()) {
50
60
  const type = changetype<nonnull<valueof<T>>>(0);
51
61
  if (type instanceof StaticArray) {
52
- return materializeStaticArray<T>(deserializeArrayArray<valueof<T>[]>(srcStart, srcEnd, 0), dst);
62
+ return materializeStaticArray<T>(
63
+ deserializeArrayArray<valueof<T>[]>(srcStart, srcEnd, 0),
64
+ dst,
65
+ );
53
66
  } else if (type instanceof JSON.Value) {
54
- return materializeStaticArray<T>(changetype<valueof<T>[]>(deserializeArbitraryArray(srcStart, srcEnd, 0)), dst);
67
+ return materializeStaticArray<T>(
68
+ changetype<valueof<T>[]>(
69
+ deserializeArbitraryArray(srcStart, srcEnd, 0),
70
+ ),
71
+ dst,
72
+ );
55
73
  } else if (type instanceof JSON.Box) {
56
- return materializeStaticArray<T>(changetype<valueof<T>[]>(deserializeBoxArray<valueof<T>[]>(srcStart, srcEnd, 0)), dst);
74
+ return materializeStaticArray<T>(
75
+ changetype<valueof<T>[]>(
76
+ deserializeBoxArray<valueof<T>[]>(srcStart, srcEnd, 0),
77
+ ),
78
+ dst,
79
+ );
57
80
  } else if (type instanceof JSON.Obj) {
58
- return materializeStaticArray<T>(deserializeObjectArray<valueof<T>[]>(srcStart, srcEnd, 0), dst);
81
+ return materializeStaticArray<T>(
82
+ deserializeObjectArray<valueof<T>[]>(srcStart, srcEnd, 0),
83
+ dst,
84
+ );
59
85
  } else if (type instanceof JSON.Raw) {
60
- return materializeStaticArray<T>(changetype<valueof<T>[]>(deserializeRawArray(srcStart, srcEnd, 0)), dst);
86
+ return materializeStaticArray<T>(
87
+ changetype<valueof<T>[]>(deserializeRawArray(srcStart, srcEnd, 0)),
88
+ dst,
89
+ );
61
90
  } else if (type instanceof Map) {
62
- return materializeStaticArray<T>(deserializeMapArray<valueof<T>[]>(srcStart, srcEnd, 0), dst);
91
+ return materializeStaticArray<T>(
92
+ deserializeMapArray<valueof<T>[]>(srcStart, srcEnd, 0),
93
+ dst,
94
+ );
63
95
  // @ts-ignore: supplied by transform
64
96
  } else if (isDefined(type.__DESERIALIZE_CUSTOM)) {
65
- return materializeStaticArray<T>(deserializeStructArray<valueof<T>[]>(srcStart, srcEnd, 0), dst);
97
+ return materializeStaticArray<T>(
98
+ deserializeStructArray<valueof<T>[]>(srcStart, srcEnd, 0),
99
+ dst,
100
+ );
66
101
  // @ts-ignore: supplied by transform
67
- } else if (isDefined(type.__DESERIALIZE_SLOW) || isDefined(type.__DESERIALIZE_FAST)) {
68
- return materializeStaticArray<T>(deserializeStructArray<valueof<T>[]>(srcStart, srcEnd, 0), dst);
102
+ } else if (
103
+ isDefined(type.__DESERIALIZE_SLOW) ||
104
+ isDefined(type.__DESERIALIZE_FAST)
105
+ ) {
106
+ return materializeStaticArray<T>(
107
+ deserializeStructArray<valueof<T>[]>(srcStart, srcEnd, 0),
108
+ dst,
109
+ );
69
110
  }
70
111
  }
71
112
 
@@ -73,12 +114,21 @@ export function deserializeStaticArray<T extends StaticArray<any>>(srcStart: usi
73
114
  }
74
115
 
75
116
 
76
- @inline export function deserializeStaticArrayField<T extends StaticArray<any>>(srcStart: usize, srcEnd: usize, dstObj: usize, dstOffset: usize = 0): usize {
117
+ @inline export function deserializeStaticArrayField<T extends StaticArray<any>>(
118
+ srcStart: usize,
119
+ srcEnd: usize,
120
+ dstObj: usize,
121
+ dstOffset: usize = 0,
122
+ ): usize {
77
123
  const valueEnd = scanValueEnd(srcStart, srcEnd);
78
124
  if (!valueEnd) throw new Error("Failed to parse JSON!");
79
125
 
80
126
  const fieldPtr = dstObj + dstOffset;
81
- const out = deserializeStaticArray<T>(srcStart, valueEnd, load<usize>(fieldPtr));
127
+ const out = deserializeStaticArray<T>(
128
+ srcStart,
129
+ valueEnd,
130
+ load<usize>(fieldPtr),
131
+ );
82
132
  store<T>(fieldPtr, out);
83
133
  return valueEnd;
84
134
  }
@@ -1,35 +1,12 @@
1
- import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
2
- import { __heap_base } from "memory";
3
1
  import { bs } from "../../../lib/as-bs";
4
- import { BACK_SLASH, QUOTE } from "../../custom/chars";
5
- import { DESERIALIZE_ESCAPE_TABLE, ESCAPE_HEX_TABLE } from "../../globals/tables";
2
+ import { DESERIALIZE_ESCAPE_TABLE } from "../../globals/tables";
6
3
  import { hex4_to_u16_swar } from "../../util/swar";
7
4
 
8
5
  // @ts-ignore: inline
9
- @inline function writeStringToField(dstFieldPtr: usize, srcStart: usize, byteLength: u32): void {
10
- if (byteLength == 0) {
11
- store<usize>(dstFieldPtr, changetype<usize>(""));
12
- return;
13
- }
14
-
15
- const current = load<usize>(dstFieldPtr);
16
- let stringPtr: usize;
17
- if (current >= __heap_base) {
18
- if (changetype<OBJECT>(current - TOTAL_OVERHEAD).rtSize == byteLength) {
19
- stringPtr = current;
20
- } else {
21
- stringPtr = __renew(current, byteLength);
22
- store<usize>(dstFieldPtr, stringPtr);
23
- }
24
- } else {
25
- stringPtr = __new(byteLength, idof<string>());
26
- store<usize>(dstFieldPtr, stringPtr);
27
- }
28
- memory.copy(stringPtr, srcStart, byteLength);
29
- }
30
-
31
- // @ts-ignore: inline
32
- @inline export function deserializeString(srcStart: usize, srcEnd: usize): string {
6
+ @inline export function deserializeString(
7
+ srcStart: usize,
8
+ srcEnd: usize,
9
+ ): string {
33
10
  // Strip quotes
34
11
  srcStart += 2;
35
12
  srcEnd -= 2;
@@ -66,67 +43,3 @@ import { hex4_to_u16_swar } from "../../util/swar";
66
43
  }
67
44
  return bs.sliceOut<string>(outStart);
68
45
  }
69
-
70
- // @ts-ignore: inline
71
- @inline export function deserializeStringField<T extends string | null>(srcStart: usize, srcEnd: usize, dstObj: usize, dstOffset: usize = 0): usize {
72
- const dstFieldPtr = dstObj + dstOffset;
73
- if (srcStart + 2 > srcEnd || load<u16>(srcStart) != QUOTE) abort("Expected leading quote");
74
-
75
- const payloadStart = srcStart + 2;
76
- srcStart = payloadStart;
77
-
78
- while (srcStart < srcEnd) {
79
- const char = load<u16>(srcStart);
80
- if (char == QUOTE) {
81
- writeStringToField(dstFieldPtr, payloadStart, <u32>(srcStart - payloadStart));
82
- return srcStart + 2;
83
- }
84
- if (char != BACK_SLASH) {
85
- srcStart += 2;
86
- continue;
87
- }
88
-
89
- bs.offset = bs.buffer;
90
- bs.ensureSize(u32(srcEnd - payloadStart));
91
- const prefixLen = <u32>(srcStart - payloadStart);
92
- if (prefixLen != 0) {
93
- memory.copy(bs.buffer, payloadStart, prefixLen);
94
- bs.offset += prefixLen;
95
- }
96
-
97
- while (srcStart < srcEnd) {
98
- const block = load<u16>(srcStart);
99
- if (block == QUOTE) {
100
- writeStringToField(dstFieldPtr, bs.buffer, <u32>(bs.offset - bs.buffer));
101
- bs.offset = bs.buffer;
102
- return srcStart + 2;
103
- }
104
-
105
- if (block != BACK_SLASH) {
106
- store<u16>(bs.offset, block);
107
- srcStart += 2;
108
- bs.offset += 2;
109
- continue;
110
- }
111
-
112
- srcStart += 2;
113
- const code = load<u16>(srcStart);
114
- if (code !== 0x75) {
115
- const escape = load<u16>(DESERIALIZE_ESCAPE_TABLE + code);
116
- store<u16>(bs.offset, escape);
117
- srcStart += 2;
118
- } else {
119
- const escaped = hex4_to_u16_swar(load<u64>(srcStart, 2));
120
- store<u16>(bs.offset, escaped);
121
- srcStart += 10;
122
- }
123
- bs.offset += 2;
124
- }
125
-
126
- bs.offset = bs.buffer;
127
- break;
128
- }
129
-
130
- abort("Unterminated string literal");
131
- return srcStart;
132
- }
@@ -1,4 +1,8 @@
1
- export function deserializeStruct<T>(srcStart: usize, srcEnd: usize, dst: usize): T {
1
+ export function deserializeStruct<T>(
2
+ srcStart: usize,
3
+ srcEnd: usize,
4
+ dst: usize,
5
+ ): T {
2
6
  const out = changetype<nonnull<T>>(dst || __new(offsetof<T>(), idof<T>()));
3
7
 
4
8
  // @ts-ignore: supplied by transform
@@ -25,7 +25,11 @@ import { atoi, isSpace } from "../../util";
25
25
  return count;
26
26
  }
27
27
 
28
- export function deserializeTypedArray<T extends ArrayLike<number>>(srcStart: usize, srcEnd: usize, dst: usize = 0): T {
28
+ export function deserializeTypedArray<T extends ArrayLike<number>>(
29
+ srcStart: usize,
30
+ srcEnd: usize,
31
+ dst: usize = 0,
32
+ ): T {
29
33
  const count = countTypedArrayElements(srcStart, srcEnd);
30
34
  let out = changetype<T>(dst || changetype<usize>(instantiate<T>(count)));
31
35
 
@@ -44,7 +48,12 @@ export function deserializeTypedArray<T extends ArrayLike<number>>(srcStart: usi
44
48
  const code = load<u16>(srcStart);
45
49
  if (code == COMMA || code == BRACKET_RIGHT || isSpace(code)) {
46
50
  if (isFloat<valueof<T>>()) {
47
- unchecked((out[index++] = deserializeFloat<valueof<T>>(lastIndex, srcStart)));
51
+ unchecked(
52
+ (out[index++] = deserializeFloat<valueof<T>>(
53
+ lastIndex,
54
+ srcStart,
55
+ )),
56
+ );
48
57
  } else {
49
58
  unchecked((out[index++] = atoi<valueof<T>>(lastIndex, srcStart)));
50
59
  }
@@ -60,7 +69,11 @@ export function deserializeTypedArray<T extends ArrayLike<number>>(srcStart: usi
60
69
  return out;
61
70
  }
62
71
 
63
- export function deserializeArrayBuffer(srcStart: usize, srcEnd: usize, dst: usize = 0): ArrayBuffer {
72
+ export function deserializeArrayBuffer(
73
+ srcStart: usize,
74
+ srcEnd: usize,
75
+ dst: usize = 0,
76
+ ): ArrayBuffer {
64
77
  const count = countTypedArrayElements(srcStart, srcEnd);
65
78
  let out = dst ? changetype<ArrayBuffer>(dst) : new ArrayBuffer(count);
66
79
 
@@ -1,12 +1,20 @@
1
1
  import { atoi } from "../../util/atoi";
2
2
 
3
3
  // @ts-ignore: inline
4
- @inline export function deserializeUnsigned<T>(srcStart: usize, srcEnd: usize): T {
4
+ @inline export function deserializeUnsigned<T>(
5
+ srcStart: usize,
6
+ srcEnd: usize,
7
+ ): T {
5
8
  return atoi<T>(srcStart, srcEnd);
6
9
  }
7
10
 
8
11
  // @ts-ignore: inline
9
- @inline export function deserializeUnsignedField<T extends number>(srcStart: usize, srcEnd: usize, dstObj: usize, dstOffset: usize = 0): usize {
12
+ @inline export function deserializeUnsignedField<T extends number>(
13
+ srcStart: usize,
14
+ srcEnd: usize,
15
+ dstObj: usize,
16
+ dstOffset: usize = 0,
17
+ ): usize {
10
18
  const fieldPtr = dstObj + dstOffset;
11
19
  let digit = <u32>load<u16>(srcStart) - 48;
12
20
  if (digit > 9) unreachable();
@@ -61,16 +69,3 @@ import { atoi } from "../../util/atoi";
61
69
  return srcStart;
62
70
  }
63
71
  }
64
-
65
- export function deserializeUnsignedScan<T extends number>(src: usize, dst: usize): usize {
66
- let digit = <T>load<u16>(src) - 48;
67
- if (digit > 9) abort("Found invalid digit");
68
- let val = digit;
69
- src += 2;
70
- while ((digit = <u32>load<u16>(src) - 48) < 10) {
71
- val = val * 10 + digit;
72
- src += 2;
73
- }
74
- store<T>(dst, val);
75
- return src;
76
- }
@@ -2,7 +2,11 @@ import { JSON } from "../../..";
2
2
  import { ensureArrayField } from "./shared";
3
3
 
4
4
 
5
- @inline export function deserializeArbitraryArrayField(srcStart: usize, srcEnd: usize, fieldPtr: usize): usize {
5
+ @inline export function deserializeArbitraryArrayField(
6
+ srcStart: usize,
7
+ srcEnd: usize,
8
+ fieldPtr: usize,
9
+ ): usize {
6
10
  ensureArrayField<JSON.Value[]>(fieldPtr);
7
11
  throw new Error("Failed to parse JSON!");
8
12
  }