json-as 1.3.9 → 1.5.0

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 (122) hide show
  1. package/CHANGELOG.md +60 -19
  2. package/README.md +120 -21
  3. package/assembly/custom/chars.ts +39 -78
  4. package/assembly/deserialize/index/arbitrary.ts +28 -10
  5. package/assembly/deserialize/index/float.ts +2 -4
  6. package/assembly/deserialize/index/integer.ts +2 -4
  7. package/assembly/deserialize/index/object.ts +6 -1
  8. package/assembly/deserialize/index/string.ts +2 -7
  9. package/assembly/deserialize/index/unsigned.ts +2 -4
  10. package/assembly/deserialize/naive/array/arbitrary.ts +3 -136
  11. package/assembly/deserialize/naive/array/array.ts +30 -1
  12. package/assembly/deserialize/naive/array/integer.ts +2 -7
  13. package/assembly/deserialize/naive/array/map.ts +10 -14
  14. package/assembly/deserialize/naive/array/object.ts +10 -14
  15. package/assembly/deserialize/naive/array/struct.ts +19 -1
  16. package/assembly/deserialize/naive/bool.ts +1 -5
  17. package/assembly/deserialize/naive/date.ts +1 -2
  18. package/assembly/deserialize/naive/float.ts +4 -11
  19. package/assembly/deserialize/naive/integer.ts +2 -4
  20. package/assembly/deserialize/naive/map.ts +42 -205
  21. package/assembly/deserialize/naive/object.ts +291 -174
  22. package/assembly/deserialize/naive/raw.ts +1 -5
  23. package/assembly/deserialize/naive/set.ts +3 -6
  24. package/assembly/deserialize/naive/staticarray.ts +2 -4
  25. package/assembly/deserialize/naive/string.ts +68 -24
  26. package/assembly/deserialize/naive/typedarray.ts +1 -2
  27. package/assembly/deserialize/naive/unsigned.ts +2 -4
  28. package/assembly/deserialize/simd/array/integer.ts +5 -13
  29. package/assembly/deserialize/simd/float.ts +5 -12
  30. package/assembly/deserialize/simd/integer.ts +6 -15
  31. package/assembly/deserialize/simd/string.ts +21 -43
  32. package/assembly/deserialize/swar/array/arbitrary.ts +1 -2
  33. package/assembly/deserialize/swar/array/array.ts +2 -4
  34. package/assembly/deserialize/swar/array/bool.ts +2 -4
  35. package/assembly/deserialize/swar/array/box.ts +1 -2
  36. package/assembly/deserialize/swar/array/float.ts +8 -21
  37. package/assembly/deserialize/swar/array/generic.ts +2 -4
  38. package/assembly/deserialize/swar/array/integer.ts +13 -27
  39. package/assembly/deserialize/swar/array/map.ts +1 -2
  40. package/assembly/deserialize/swar/array/object.ts +2 -4
  41. package/assembly/deserialize/swar/array/raw.ts +1 -2
  42. package/assembly/deserialize/swar/array/shared.ts +9 -21
  43. package/assembly/deserialize/swar/array/string.ts +4 -10
  44. package/assembly/deserialize/swar/array/struct.ts +3 -9
  45. package/assembly/deserialize/swar/array.ts +1 -3
  46. package/assembly/deserialize/swar/float.ts +7 -17
  47. package/assembly/deserialize/swar/integer.ts +6 -15
  48. package/assembly/deserialize/swar/string.ts +40 -54
  49. package/assembly/deserialize/swar/typedarray.ts +4 -4
  50. package/assembly/index.d.ts +259 -21
  51. package/assembly/index.ts +1704 -266
  52. package/assembly/serialize/index/arbitrary.ts +70 -4
  53. package/assembly/serialize/index/jsonarray.ts +51 -0
  54. package/assembly/serialize/index/object.ts +39 -14
  55. package/assembly/serialize/index/string.ts +1 -2
  56. package/assembly/serialize/index/typedarray.ts +1 -2
  57. package/assembly/serialize/index.ts +1 -0
  58. package/assembly/serialize/naive/array.ts +23 -34
  59. package/assembly/serialize/naive/bool.ts +0 -1
  60. package/assembly/serialize/naive/float.ts +16 -25
  61. package/assembly/serialize/naive/integer.ts +1 -5
  62. package/assembly/serialize/naive/raw.ts +1 -2
  63. package/assembly/serialize/naive/set.ts +0 -4
  64. package/assembly/serialize/naive/staticarray.ts +0 -5
  65. package/assembly/serialize/naive/string.ts +11 -7
  66. package/assembly/serialize/naive/typedarray.ts +0 -6
  67. package/assembly/serialize/simd/string.ts +1 -3
  68. package/assembly/serialize/swar/string.ts +2 -4
  69. package/assembly/util/atoi-fast.ts +4 -14
  70. package/assembly/util/atoi.ts +1 -2
  71. package/assembly/util/bytes.ts +1 -2
  72. package/assembly/util/idofd.ts +1 -2
  73. package/assembly/util/isSpace.ts +1 -2
  74. package/assembly/util/itoa-fast.ts +9 -15
  75. package/assembly/util/nextPowerOf2.ts +1 -2
  76. package/assembly/util/parsefloat-fast.ts +4 -7
  77. package/assembly/util/ptrToStr.ts +1 -2
  78. package/assembly/util/scanValueEnd.ts +1 -2
  79. package/assembly/util/scanValueEndSimd.ts +198 -0
  80. package/assembly/util/scanValueEndSwar.ts +184 -0
  81. package/assembly/util/scientific.ts +8 -14
  82. package/assembly/util/simd-int.ts +4 -8
  83. package/assembly/util/snp.ts +2 -7
  84. package/assembly/util/stringScan.ts +2 -4
  85. package/assembly/util/swar-int.ts +8 -16
  86. package/assembly/util/swar.ts +2 -4
  87. package/lib/as-bs.ts +57 -42
  88. package/package.json +27 -10
  89. package/transform/lib/builder.d.ts +0 -1
  90. package/transform/lib/builder.js +0 -1
  91. package/transform/lib/index.d.ts +0 -1
  92. package/transform/lib/index.js +617 -326
  93. package/transform/lib/linkers/alias.d.ts +0 -1
  94. package/transform/lib/linkers/alias.js +0 -1
  95. package/transform/lib/linkers/custom.d.ts +0 -1
  96. package/transform/lib/linkers/custom.js +0 -1
  97. package/transform/lib/linkers/imports.d.ts +0 -1
  98. package/transform/lib/linkers/imports.js +0 -1
  99. package/transform/lib/types.d.ts +4 -2
  100. package/transform/lib/types.js +5 -1
  101. package/transform/lib/util.d.ts +0 -1
  102. package/transform/lib/util.js +0 -1
  103. package/transform/lib/visitor.d.ts +0 -1
  104. package/transform/lib/visitor.js +0 -1
  105. package/assembly/util/dragonbox-cache.ts +0 -445
  106. package/assembly/util/dragonbox.ts +0 -660
  107. package/transform/lib/builder.d.ts.map +0 -1
  108. package/transform/lib/builder.js.map +0 -1
  109. package/transform/lib/index.d.ts.map +0 -1
  110. package/transform/lib/index.js.map +0 -1
  111. package/transform/lib/linkers/alias.d.ts.map +0 -1
  112. package/transform/lib/linkers/alias.js.map +0 -1
  113. package/transform/lib/linkers/custom.d.ts.map +0 -1
  114. package/transform/lib/linkers/custom.js.map +0 -1
  115. package/transform/lib/linkers/imports.d.ts.map +0 -1
  116. package/transform/lib/linkers/imports.js.map +0 -1
  117. package/transform/lib/types.d.ts.map +0 -1
  118. package/transform/lib/types.js.map +0 -1
  119. package/transform/lib/util.d.ts.map +0 -1
  120. package/transform/lib/util.js.map +0 -1
  121. package/transform/lib/visitor.d.ts.map +0 -1
  122. package/transform/lib/visitor.js.map +0 -1
@@ -7,12 +7,9 @@ import { parse4Digits_PairMul } from "../../../util/swar-int";
7
7
  // Store helpers parameterised on the element type `E` directly, so they
8
8
  // serve both `Array<E>` and `TypedArray<E>` callers. The integer-array
9
9
  // callers below all pass `valueof<T>` and AS folds the resulting tower of
10
- // `sizeof<E>` comparisons at compile time same codegen as the prior
10
+ // `sizeof<E>` comparisons at compile time - same codegen as the prior
11
11
  // `T extends number[]` version, but reusable from `swar/typedarray.ts`.
12
- @inline function storeSignedIntegerE<E extends number>(
13
- slot: usize,
14
- value: i64,
15
- ): void {
12
+ function storeSignedIntegerE<E extends number>(slot: usize, value: i64): void {
16
13
  if (sizeof<E>() == sizeof<i8>()) {
17
14
  store<i8>(slot, <i8>value);
18
15
  } else if (sizeof<E>() == sizeof<i16>()) {
@@ -26,8 +23,7 @@ import { parse4Digits_PairMul } from "../../../util/swar-int";
26
23
  }
27
24
  }
28
25
 
29
-
30
- @inline function storeUnsignedIntegerE<E extends number>(
26
+ function storeUnsignedIntegerE<E extends number>(
31
27
  slot: usize,
32
28
  value: u64,
33
29
  ): void {
@@ -53,7 +49,7 @@ import { parse4Digits_PairMul } from "../../../util/swar-int";
53
49
  // Parsers are also E-parameterised so they're shareable with
54
50
  // `swar/typedarray.ts`. The body is byte-identical to the prior version
55
51
  // modulo s/valueof<T>/E/.
56
- @inline export function parseSignedIntegerScalar<E extends number>(
52
+ export function parseSignedIntegerScalar<E extends number>(
57
53
  srcStart: usize,
58
54
  srcEnd: usize,
59
55
  slot: usize,
@@ -83,8 +79,7 @@ import { parse4Digits_PairMul } from "../../../util/swar-int";
83
79
  return srcStart;
84
80
  }
85
81
 
86
-
87
- @inline export function parseUnsignedIntegerScalar<E extends number>(
82
+ export function parseUnsignedIntegerScalar<E extends number>(
88
83
  srcStart: usize,
89
84
  srcEnd: usize,
90
85
  slot: usize,
@@ -105,8 +100,7 @@ import { parse4Digits_PairMul } from "../../../util/swar-int";
105
100
  return srcStart;
106
101
  }
107
102
 
108
-
109
- @inline export function parseSignedIntegerSWAR<E extends number>(
103
+ export function parseSignedIntegerSWAR<E extends number>(
110
104
  srcStart: usize,
111
105
  srcEnd: usize,
112
106
  slot: usize,
@@ -154,8 +148,7 @@ import { parse4Digits_PairMul } from "../../../util/swar-int";
154
148
  return srcStart;
155
149
  }
156
150
 
157
-
158
- @inline export function parseUnsignedIntegerSWAR<E extends number>(
151
+ export function parseUnsignedIntegerSWAR<E extends number>(
159
152
  srcStart: usize,
160
153
  srcEnd: usize,
161
154
  slot: usize,
@@ -214,11 +207,7 @@ import { parse4Digits_PairMul } from "../../../util/swar-int";
214
207
  return srcStart;
215
208
  }
216
209
 
217
-
218
- @inline function skipIntegerArrayWhitespace(
219
- srcStart: usize,
220
- srcEnd: usize,
221
- ): usize {
210
+ function skipIntegerArrayWhitespace(srcStart: usize, srcEnd: usize): usize {
222
211
  while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) {
223
212
  srcStart += 2;
224
213
  }
@@ -309,8 +298,7 @@ export function deserializeIntegerArray_SLOW<T extends number[]>(
309
298
  throw new Error("Failed to parse JSON!");
310
299
  }
311
300
 
312
-
313
- @inline function deserializeIntegerArrayImpl<T extends number[]>(
301
+ function deserializeIntegerArrayImpl<T extends number[]>(
314
302
  srcStart: usize,
315
303
  srcEnd: usize,
316
304
  dst: usize,
@@ -644,8 +632,7 @@ function deserializeNarrowIntegerArray_SWAR<T extends number[]>(
644
632
  return out;
645
633
  }
646
634
 
647
-
648
- @inline function deserializeIntegerArrayBody<T extends number[]>(
635
+ function deserializeIntegerArrayBody<T extends number[]>(
649
636
  srcStart: usize,
650
637
  srcEnd: usize,
651
638
  out: T,
@@ -666,7 +653,7 @@ function deserializeNarrowIntegerArray_SWAR<T extends number[]>(
666
653
  const slot = ensureArrayElementSlot<T>(out, index);
667
654
  // Inline the array-optimized SWAR parser directly. The top-level
668
655
  // (`deserializeIntegerArrayImpl`) and the typed-array path
669
- // (`swar/typedarray.ts`) already call these having the field path
656
+ // (`swar/typedarray.ts`) already call these - having the field path
670
657
  // call them too means the per-element parser is identical across all
671
658
  // three call sites (parse4 + scalar fold for both signed and
672
659
  // unsigned, narrow-lane special case for i8/u8/i16/u16).
@@ -674,7 +661,7 @@ function deserializeNarrowIntegerArray_SWAR<T extends number[]>(
674
661
  // Why not `deserializeUnsignedField_SWAR` (which uses parse8 + scalar)?
675
662
  // That tuning targets the struct-single-field path where the digit
676
663
  // run is one aligned token. In an array, mixed element widths cause
677
- // parse8 to fail-and-retry at element boundaries see u32-64mib's
664
+ // parse8 to fail-and-retry at element boundaries - see u32-64mib's
678
665
  // 23% regression when parse8 was tried in the array path.
679
666
  srcStart = isSigned<valueof<T>>()
680
667
  ? parseSignedIntegerSWAR<valueof<T>>(srcStart, srcEnd, slot)
@@ -702,8 +689,7 @@ function deserializeNarrowIntegerArray_SWAR<T extends number[]>(
702
689
  throw new Error("Failed to parse JSON!");
703
690
  }
704
691
 
705
-
706
- @inline export function deserializeIntegerArrayField<T extends number[]>(
692
+ export function deserializeIntegerArrayField<T extends number[]>(
707
693
  srcStart: usize,
708
694
  srcEnd: usize,
709
695
  fieldPtr: usize,
@@ -1,8 +1,7 @@
1
1
  import { deserializeGenericArrayBody } from "./generic";
2
2
  import { ensureArrayField } from "./shared";
3
3
 
4
-
5
- @inline export function deserializeMapArrayField<T extends Map<any, any>[]>(
4
+ export function deserializeMapArrayField<T extends Map<any, any>[]>(
6
5
  srcStart: usize,
7
6
  srcEnd: usize,
8
7
  fieldPtr: usize,
@@ -7,8 +7,7 @@ import {
7
7
  skipWhitespace,
8
8
  } from "./shared";
9
9
 
10
-
11
- @inline function deserializeObjectArrayBody<T extends unknown[]>(
10
+ function deserializeObjectArrayBody<T extends unknown[]>(
12
11
  srcStart: usize,
13
12
  srcEnd: usize,
14
13
  out: T,
@@ -59,8 +58,7 @@ import {
59
58
  throw new Error("Failed to parse JSON!");
60
59
  }
61
60
 
62
-
63
- @inline export function deserializeObjectArrayField<T extends unknown[]>(
61
+ export function deserializeObjectArrayField<T extends unknown[]>(
64
62
  srcStart: usize,
65
63
  srcEnd: usize,
66
64
  fieldPtr: usize,
@@ -2,8 +2,7 @@ import { JSON } from "../../..";
2
2
  import { deserializeGenericArrayBody } from "./generic";
3
3
  import { ensureArrayField } from "./shared";
4
4
 
5
-
6
- @inline export function deserializeRawArrayField(
5
+ export function deserializeRawArrayField(
7
6
  srcStart: usize,
8
7
  srcEnd: usize,
9
8
  fieldPtr: usize,
@@ -10,16 +10,12 @@ import {
10
10
  import { isSpace } from "../../../util";
11
11
 
12
12
  /** Advance past JSON whitespace (space, tab, LF, CR). */
13
- // @ts-expect-error: @inline is a valid decorator
14
- @inline export function skipWhitespace(srcStart: usize, srcEnd: usize): usize {
13
+ export function skipWhitespace(srcStart: usize, srcEnd: usize): usize {
15
14
  while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
16
15
  return srcStart;
17
16
  }
18
17
 
19
-
20
- @inline export function ensureArrayField<T extends Array<any>>(
21
- fieldPtr: usize,
22
- ): T {
18
+ export function ensureArrayField<T extends Array<any>>(fieldPtr: usize): T {
23
19
  let out = load<T>(fieldPtr);
24
20
  if (!changetype<usize>(out)) {
25
21
  out = changetype<T>(instantiate<T>());
@@ -28,8 +24,7 @@ import { isSpace } from "../../../util";
28
24
  return out;
29
25
  }
30
26
 
31
-
32
- @inline export function ensureArrayFieldAt<T extends Array<any>>(
27
+ export function ensureArrayFieldAt<T extends Array<any>>(
33
28
  dstObj: usize,
34
29
  dstOffset: usize,
35
30
  ): T {
@@ -41,8 +36,7 @@ import { isSpace } from "../../../util";
41
36
  return out;
42
37
  }
43
38
 
44
-
45
- @inline function backslashOrQuoteMask(block: u64): u64 {
39
+ function backslashOrQuoteMask(block: u64): u64 {
46
40
  const b = block ^ 0x005c_005c_005c_005c;
47
41
  const q = block ^ 0x0022_0022_0022_0022;
48
42
  return (
@@ -51,8 +45,7 @@ import { isSpace } from "../../../util";
51
45
  );
52
46
  }
53
47
 
54
-
55
- @inline export function ensureArrayElementSlot<T extends Array<any>>(
48
+ export function ensureArrayElementSlot<T extends Array<any>>(
56
49
  out: T,
57
50
  index: i32,
58
51
  ): usize {
@@ -60,7 +53,7 @@ import { isSpace } from "../../../util";
60
53
  if (out.length < nextLength) {
61
54
  // Grow via `push`, not `out.length = nextLength`. AS's `length=`
62
55
  // setter calls `ensureCapacity(canGrow=false)` which reallocates to
63
- // *exactly* the requested size fine for a one-shot resize, but
56
+ // *exactly* the requested size - fine for a one-shot resize, but
64
57
  // catastrophic in the per-element loop (every push triggers a full
65
58
  // copy of the array, giving O(N²) growth cost). `push` goes through
66
59
  // `canGrow=true`, doubling capacity geometrically as needed.
@@ -77,16 +70,12 @@ import { isSpace } from "../../../util";
77
70
  return out.dataStart + <usize>index * sizeof<valueof<T>>();
78
71
  }
79
72
 
80
-
81
- @inline export function scanQuotedValueEnd_SWAR(
82
- srcStart: usize,
83
- srcEnd: usize,
84
- ): usize {
73
+ export function scanQuotedValueEnd_SWAR(srcStart: usize, srcEnd: usize): usize {
85
74
  srcStart += 2;
86
75
  const srcEnd8 = srcEnd >= 8 ? srcEnd - 8 : 0;
87
76
 
88
77
  while (srcStart <= srcEnd8) {
89
- let mask = inline.always(backslashOrQuoteMask(load<u64>(srcStart)));
78
+ let mask = backslashOrQuoteMask(load<u64>(srcStart));
90
79
  if (mask === 0) {
91
80
  srcStart += 8;
92
81
  continue;
@@ -114,8 +103,7 @@ import { isSpace } from "../../../util";
114
103
  return 0;
115
104
  }
116
105
 
117
-
118
- @inline export function scanValueEnd(srcStart: usize, srcEnd: usize): usize {
106
+ export function scanValueEnd<T = usize>(srcStart: usize, srcEnd: usize): usize {
119
107
  if (srcStart >= srcEnd) return 0;
120
108
  const first = load<u16>(srcStart);
121
109
 
@@ -8,17 +8,12 @@ import { isSpace } from "../../../util";
8
8
  import { ensureArrayElementSlot, ensureArrayField } from "./shared";
9
9
  import { deserializeStringField_SWAR } from "../string";
10
10
 
11
-
12
- @inline function skipStringArrayWhitespace(
13
- srcStart: usize,
14
- srcEnd: usize,
15
- ): usize {
11
+ function skipStringArrayWhitespace(srcStart: usize, srcEnd: usize): usize {
16
12
  while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
17
13
  return srcStart;
18
14
  }
19
15
 
20
-
21
- @inline function deserializeStringArrayBody<T extends string[]>(
16
+ function deserializeStringArrayBody<T extends string[]>(
22
17
  srcStart: usize,
23
18
  srcEnd: usize,
24
19
  out: T,
@@ -42,7 +37,7 @@ import { deserializeStringField_SWAR } from "../string";
42
37
  // and skip 8 bytes.
43
38
  //
44
39
  // We accept null tokens unconditionally rather than gating on
45
- // `isNullable<valueof<T>>()` AS's `valueof` of a nullable-array
40
+ // `isNullable<valueof<T>>()` - AS's `valueof` of a nullable-array
46
41
  // element type doesn't always preserve the nullable marker through
47
42
  // the dispatcher's `<T>` cast, so the gate would mis-fire for the
48
43
  // very case it's meant to handle. The runtime cost on plain
@@ -81,8 +76,7 @@ import { deserializeStringField_SWAR } from "../string";
81
76
  throw new Error("Failed to parse JSON!");
82
77
  }
83
78
 
84
-
85
- @inline export function deserializeStringArrayField<T extends string[]>(
79
+ export function deserializeStringArrayField<T extends string[]>(
86
80
  srcStart: usize,
87
81
  srcEnd: usize,
88
82
  fieldPtr: usize,
@@ -2,11 +2,7 @@ import { BRACKET_LEFT, BRACKET_RIGHT, COMMA } from "../../../custom/chars";
2
2
  import { isSpace } from "../../../util";
3
3
  import { ensureArrayElementSlot, ensureArrayField } from "./shared";
4
4
 
5
-
6
- @inline function skipStructArrayWhitespace(
7
- srcStart: usize,
8
- srcEnd: usize,
9
- ): usize {
5
+ function skipStructArrayWhitespace(srcStart: usize, srcEnd: usize): usize {
10
6
  while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
11
7
  return srcStart;
12
8
  }
@@ -26,7 +22,7 @@ import { ensureArrayElementSlot, ensureArrayField } from "./shared";
26
22
  // - Whitespace is skipped at each separator boundary so struct-array
27
23
  // fields tolerate the same `[ {...} , {...} ]` shape that top-level
28
24
  // `JSON.parse` does.
29
- @inline function deserializeStructArrayBody<T extends unknown[]>(
25
+ function deserializeStructArrayBody<T extends unknown[]>(
30
26
  srcStart: usize,
31
27
  srcEnd: usize,
32
28
  out: T,
@@ -100,9 +96,7 @@ import { ensureArrayElementSlot, ensureArrayField } from "./shared";
100
96
 
101
97
  throw new Error("Failed to parse JSON!");
102
98
  }
103
-
104
-
105
- @inline export function deserializeStructArrayField<T extends unknown[]>(
99
+ export function deserializeStructArrayField<T extends unknown[]>(
106
100
  srcStart: usize,
107
101
  srcEnd: usize,
108
102
  fieldPtr: usize,
@@ -13,9 +13,7 @@ import { deserializeStringArrayField } from "./array/string";
13
13
  import { deserializeStructArrayField } from "./array/struct";
14
14
 
15
15
  export { deserializeArrayField as deserializeArrayField_SWAR };
16
-
17
-
18
- @inline export function deserializeArrayField<T extends unknown[]>(
16
+ export function deserializeArrayField<T extends unknown[]>(
19
17
  srcStart: usize,
20
18
  srcEnd: usize,
21
19
  dstObj: usize,
@@ -12,7 +12,7 @@
12
12
  //
13
13
  // Inspired by Daniel Lemire, "Number parsing at a gigabyte per second" (2021)
14
14
  // and the simdjson `fast_float` implementation. The integer-part loop stays
15
- // scalar most JSON float payloads have 1-3 digit integer parts, so a parse4
15
+ // scalar - most JSON float payloads have 1-3 digit integer parts, so a parse4
16
16
  // stride there pays the wasted-validate cost on every call without saving
17
17
  // enough scalar iterations.
18
18
 
@@ -34,14 +34,11 @@ const ASCII_DOT: u16 = 46;
34
34
  const ASCII_ZERO: u16 = 48;
35
35
  const ASCII_E_UP: u16 = 69;
36
36
  const ASCII_E_LO: u16 = 101;
37
-
38
- // @ts-ignore: inline
39
- @inline export function loadPow10(exp: u32): f64 {
37
+ export function loadPow10(exp: u32): f64 {
40
38
  return load<f64>(POW10_F64_POS + ((<usize>exp) << 3));
41
39
  }
42
40
 
43
- // @ts-ignore: inline
44
- @inline function fallback<T>(srcStart: usize, srcEnd: usize): T {
41
+ function fallback<T>(srcStart: usize, srcEnd: usize): T {
45
42
  const s = ptrToStr(srcStart, srcEnd);
46
43
  // @ts-ignore
47
44
  const type: T = 0;
@@ -50,9 +47,7 @@ const ASCII_E_LO: u16 = 101;
50
47
  // @ts-ignore
51
48
  return <T>(<f32>f32.parse(s));
52
49
  }
53
-
54
- // @ts-ignore: inline
55
- @inline function fallbackField<T extends number>(
50
+ function fallbackField<T extends number>(
56
51
  origStart: usize,
57
52
  end: usize,
58
53
  fieldPtr: usize,
@@ -65,11 +60,7 @@ const ASCII_E_LO: u16 = 101;
65
60
  }
66
61
  }
67
62
 
68
- // @ts-ignore: inline
69
- @inline export function deserializeFloat_SWAR<T>(
70
- srcStart: usize,
71
- srcEnd: usize,
72
- ): T {
63
+ export function deserializeFloat_SWAR<T>(srcStart: usize, srcEnd: usize): T {
73
64
  const origStart = srcStart;
74
65
  let p = srcStart;
75
66
  let negative = false;
@@ -98,7 +89,7 @@ const ASCII_E_LO: u16 = 101;
98
89
  if (p < srcEnd && load<u16>(p) == ASCII_DOT) {
99
90
  p += 2;
100
91
  while (p + 6 < srcEnd) {
101
- const parsed = inline.always(parse4Digits_PairMul(load<u64>(p)));
92
+ const parsed = parse4Digits_PairMul(load<u64>(p));
102
93
  if (parsed == U32.MAX_VALUE) break;
103
94
  mantissa = mantissa * 10_000 + <u64>parsed;
104
95
  fracDigits += 4;
@@ -181,8 +172,7 @@ const ASCII_E_LO: u16 = 101;
181
172
  return <T>(<f32>result);
182
173
  }
183
174
 
184
- // @ts-ignore: inline
185
- @inline export function deserializeFloatField_SWAR<T extends number>(
175
+ export function deserializeFloatField_SWAR<T extends number>(
186
176
  srcStart: usize,
187
177
  srcEnd: usize,
188
178
  dstObj: usize,
@@ -40,11 +40,7 @@ const ASCII_ZERO: u16 = 48;
40
40
  * @param value The `u64` accumulator, interpreted as a two's-complement
41
41
  * signed integer for narrower types.
42
42
  */
43
- // @ts-expect-error: @inline is a valid decorator
44
- @inline function storeSignedToField<T extends number>(
45
- dstPtr: usize,
46
- value: u64,
47
- ): void {
43
+ function storeSignedToField<T extends number>(dstPtr: usize, value: u64): void {
48
44
  if (sizeof<T>() == 1) {
49
45
  store<i8>(dstPtr, <i8>value);
50
46
  } else if (sizeof<T>() == 2) {
@@ -63,8 +59,7 @@ const ASCII_ZERO: u16 = 48;
63
59
  * @param dstPtr Destination pointer (already includes any field offset).
64
60
  * @param value The `u64` accumulator.
65
61
  */
66
- // @ts-expect-error: @inline is a valid decorator
67
- @inline function storeUnsignedToField<T extends number>(
62
+ function storeUnsignedToField<T extends number>(
68
63
  dstPtr: usize,
69
64
  value: u64,
70
65
  ): void {
@@ -90,8 +85,7 @@ const ASCII_ZERO: u16 = 48;
90
85
  * @param srcEnd Pointer just past the last code unit.
91
86
  * @returns The parsed value, two's-complement truncated to `T`.
92
87
  */
93
- // @ts-expect-error: @inline is a valid decorator
94
- @inline export function deserializeInteger_SWAR<T extends number>(
88
+ export function deserializeInteger_SWAR<T extends number>(
95
89
  srcStart: usize,
96
90
  srcEnd: usize,
97
91
  ): T {
@@ -137,8 +131,7 @@ const ASCII_ZERO: u16 = 48;
137
131
  * @param dstOffset Byte offset of the field within `dstObj`.
138
132
  * @returns The source position immediately after the last digit consumed.
139
133
  */
140
- // @ts-expect-error: @inline is a valid decorator
141
- @inline export function deserializeIntegerField_SWAR<T extends number>(
134
+ export function deserializeIntegerField_SWAR<T extends number>(
142
135
  srcStart: usize,
143
136
  srcEnd: usize,
144
137
  dstObj: usize,
@@ -178,8 +171,7 @@ const ASCII_ZERO: u16 = 48;
178
171
  * @param srcEnd Pointer just past the last code unit.
179
172
  * @returns The parsed value, truncated to `T`.
180
173
  */
181
- // @ts-expect-error: @inline is a valid decorator
182
- @inline export function deserializeUnsigned_SWAR<T extends number>(
174
+ export function deserializeUnsigned_SWAR<T extends number>(
183
175
  srcStart: usize,
184
176
  srcEnd: usize,
185
177
  ): T {
@@ -217,8 +209,7 @@ const ASCII_ZERO: u16 = 48;
217
209
  * @param dstOffset Byte offset of the field within `dstObj`.
218
210
  * @returns The source position immediately after the last digit consumed.
219
211
  */
220
- // @ts-expect-error: @inline is a valid decorator
221
- @inline export function deserializeUnsignedField_SWAR<T extends number>(
212
+ export function deserializeUnsignedField_SWAR<T extends number>(
222
213
  srcStart: usize,
223
214
  srcEnd: usize,
224
215
  dstObj: usize,