json-as 1.3.7 → 1.3.8

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 (116) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +1 -1
  3. package/assembly/deserialize/index/arbitrary.ts +2 -2
  4. package/assembly/deserialize/index/array.ts +29 -14
  5. package/assembly/deserialize/index/bool.ts +1 -1
  6. package/assembly/deserialize/index/date.ts +1 -1
  7. package/assembly/deserialize/index/float.ts +40 -1
  8. package/assembly/deserialize/index/integer.ts +3 -3
  9. package/assembly/deserialize/index/map.ts +1 -1
  10. package/assembly/deserialize/index/object.ts +1 -1
  11. package/assembly/deserialize/index/raw.ts +1 -1
  12. package/assembly/deserialize/index/set.ts +1 -1
  13. package/assembly/deserialize/index/staticarray.ts +4 -1
  14. package/assembly/deserialize/index/string.ts +28 -3
  15. package/assembly/deserialize/index/struct.ts +1 -1
  16. package/assembly/deserialize/index/typedarray.ts +25 -15
  17. package/assembly/deserialize/index/unsigned.ts +3 -3
  18. package/assembly/deserialize/index.ts +1 -0
  19. package/assembly/deserialize/naive/array/bool.ts +68 -0
  20. package/assembly/deserialize/naive/array/float.ts +63 -0
  21. package/assembly/deserialize/{simple → naive}/array/generic.ts +1 -2
  22. package/assembly/deserialize/naive/array/integer.ts +86 -0
  23. package/assembly/deserialize/{simple → naive}/array/map.ts +0 -1
  24. package/assembly/deserialize/{simple → naive}/array/object.ts +0 -1
  25. package/assembly/deserialize/naive/array/string.ts +69 -0
  26. package/assembly/deserialize/{simple → naive}/array/struct.ts +0 -1
  27. package/assembly/deserialize/{simple → naive}/array.ts +6 -11
  28. package/assembly/deserialize/naive/float.ts +135 -0
  29. package/assembly/deserialize/{simple → naive}/integer.ts +2 -2
  30. package/assembly/deserialize/{simple → naive}/map.ts +12 -6
  31. package/assembly/deserialize/{simple → naive}/object.ts +4 -7
  32. package/assembly/deserialize/{simple → naive}/set.ts +12 -27
  33. package/assembly/deserialize/{simple → naive}/staticarray/array.ts +1 -1
  34. package/assembly/deserialize/{simple → naive}/staticarray/bool.ts +1 -1
  35. package/assembly/deserialize/{simple → naive}/staticarray/float.ts +1 -1
  36. package/assembly/deserialize/{simple → naive}/staticarray/integer.ts +1 -1
  37. package/assembly/deserialize/{simple → naive}/staticarray/struct.ts +1 -2
  38. package/assembly/deserialize/{simple → naive}/staticarray.ts +4 -4
  39. package/assembly/deserialize/naive/string.ts +199 -0
  40. package/assembly/deserialize/{simple → naive}/typedarray.ts +4 -4
  41. package/assembly/deserialize/{simple → naive}/unsigned.ts +2 -2
  42. package/assembly/deserialize/simd/array/integer.ts +19 -19
  43. package/assembly/deserialize/simd/float.ts +303 -0
  44. package/assembly/deserialize/simd/string.ts +233 -108
  45. package/assembly/deserialize/swar/array/arbitrary.ts +6 -2
  46. package/assembly/deserialize/swar/array/array.ts +14 -7
  47. package/assembly/deserialize/swar/array/bool.ts +8 -3
  48. package/assembly/deserialize/swar/array/box.ts +6 -2
  49. package/assembly/deserialize/swar/array/float.ts +282 -6
  50. package/assembly/deserialize/swar/array/generic.ts +6 -2
  51. package/assembly/deserialize/swar/array/integer.ts +81 -74
  52. package/assembly/deserialize/swar/array/map.ts +6 -2
  53. package/assembly/deserialize/swar/array/object.ts +24 -32
  54. package/assembly/deserialize/swar/array/raw.ts +6 -2
  55. package/assembly/deserialize/swar/array/shared.ts +32 -8
  56. package/assembly/deserialize/swar/array/string.ts +127 -10
  57. package/assembly/deserialize/swar/array/struct.ts +45 -11
  58. package/assembly/deserialize/swar/array.ts +2 -56
  59. package/assembly/deserialize/swar/float.ts +304 -0
  60. package/assembly/deserialize/swar/string.ts +119 -104
  61. package/assembly/deserialize/swar/typedarray.ts +224 -0
  62. package/assembly/index.ts +203 -293
  63. package/assembly/serialize/index/array.ts +1 -1
  64. package/assembly/serialize/index/bool.ts +1 -1
  65. package/assembly/serialize/index/date.ts +1 -1
  66. package/assembly/serialize/index/float.ts +1 -1
  67. package/assembly/serialize/index/integer.ts +1 -1
  68. package/assembly/serialize/index/map.ts +1 -1
  69. package/assembly/serialize/index/raw.ts +1 -1
  70. package/assembly/serialize/index/set.ts +1 -1
  71. package/assembly/serialize/index/staticarray.ts +1 -1
  72. package/assembly/serialize/index/string.ts +1 -1
  73. package/assembly/serialize/index/struct.ts +1 -1
  74. package/assembly/serialize/index/typedarray.ts +2 -11
  75. package/assembly/serialize/index.ts +1 -0
  76. package/assembly/serialize/{simple → naive}/array.ts +87 -0
  77. package/assembly/serialize/{simple → naive}/string.ts +1 -1
  78. package/assembly/serialize/swar/string.ts +0 -139
  79. package/assembly/util/dragonbox.ts +10 -3
  80. package/assembly/util/itoa-fast.ts +29 -18
  81. package/assembly/util/scanValueEnd.ts +78 -0
  82. package/assembly/util/scientific.ts +132 -0
  83. package/lib/as-bs.ts +14 -1
  84. package/package.json +14 -13
  85. package/transform/lib/index.d.ts +4 -0
  86. package/transform/lib/index.d.ts.map +1 -1
  87. package/transform/lib/index.js +153 -236
  88. package/transform/lib/index.js.map +1 -1
  89. package/assembly/deserialize/simple/arbitrary.ts +0 -30
  90. package/assembly/deserialize/simple/array/bool.ts +0 -48
  91. package/assembly/deserialize/simple/array/float.ts +0 -55
  92. package/assembly/deserialize/simple/array/integer.ts +0 -33
  93. package/assembly/deserialize/simple/array/string.ts +0 -29
  94. package/assembly/deserialize/simple/float.ts +0 -206
  95. package/assembly/deserialize/simple/string.ts +0 -45
  96. package/assembly/serialize/simple/arbitrary.ts +0 -79
  97. package/assembly/serialize/simple/object.ts +0 -42
  98. /package/assembly/deserialize/{simple → naive}/array/arbitrary.ts +0 -0
  99. /package/assembly/deserialize/{simple → naive}/array/array.ts +0 -0
  100. /package/assembly/deserialize/{simple → naive}/array/box.ts +0 -0
  101. /package/assembly/deserialize/{simple → naive}/array/raw.ts +0 -0
  102. /package/assembly/deserialize/{simple → naive}/bool.ts +0 -0
  103. /package/assembly/deserialize/{simple → naive}/date.ts +0 -0
  104. /package/assembly/deserialize/{simple → naive}/raw.ts +0 -0
  105. /package/assembly/deserialize/{simple → naive}/staticarray/string.ts +0 -0
  106. /package/assembly/deserialize/{simple → naive}/struct.ts +0 -0
  107. /package/assembly/serialize/{simple → naive}/bool.ts +0 -0
  108. /package/assembly/serialize/{simple → naive}/date.ts +0 -0
  109. /package/assembly/serialize/{simple → naive}/float.ts +0 -0
  110. /package/assembly/serialize/{simple → naive}/integer.ts +0 -0
  111. /package/assembly/serialize/{simple → naive}/map.ts +0 -0
  112. /package/assembly/serialize/{simple → naive}/raw.ts +0 -0
  113. /package/assembly/serialize/{simple → naive}/set.ts +0 -0
  114. /package/assembly/serialize/{simple → naive}/staticarray.ts +0 -0
  115. /package/assembly/serialize/{simple → naive}/struct.ts +0 -0
  116. /package/assembly/serialize/{simple → naive}/typedarray.ts +0 -0
@@ -1,55 +0,0 @@
1
- import { isSpace } from "../../../util";
2
- import { COMMA, BRACKET_RIGHT } from "../../../custom/chars";
3
- import { JSON } from "../../..";
4
-
5
- /**
6
- * Float-array deserializer (`f64[]` / `f32[]`).
7
- *
8
- * Worst-case sizing: every element is at least `D,` = 2 UTF-16 chars = 4
9
- * bytes (a single-digit value followed by `,` or `]`). The `srcLen >> 2`
10
- * upper bound holds even for valid JSON containing negative or fractional
11
- * widths, because each element advance still consumes >= 4 bytes.
12
- *
13
- * f64/f32 are unmanaged so AS skips zero-fill on `length=`. The parse loop
14
- * writes through a direct `writePtr` pointer, eliminating `Array.push`'s
15
- * per-element capacity check + length write. Final `out.length` is trimmed
16
- * to the actual element count.
17
- */
18
- export function deserializeFloatArray<T extends number[]>(
19
- srcStart: usize,
20
- srcEnd: usize,
21
- dst: usize,
22
- ): T {
23
- const out = changetype<nonnull<T>>(
24
- dst || changetype<usize>(instantiate<T>()),
25
- );
26
-
27
- const elementSize = sizeof<valueof<T>>();
28
- const maxElements = i32((<usize>(srcEnd - srcStart)) >> 2);
29
- if (maxElements > 0) out.length = maxElements;
30
- const dataStart = out.dataStart;
31
- let writePtr = dataStart;
32
-
33
- let lastIndex: usize = 0;
34
- while (srcStart < srcEnd) {
35
- const code = load<u16>(srcStart);
36
- if (<u32>code - 48 <= 9 || code == 45) {
37
- lastIndex = srcStart;
38
- srcStart += 2;
39
- while (srcStart < srcEnd) {
40
- const c = load<u16>(srcStart);
41
- if (c == COMMA || c == BRACKET_RIGHT || isSpace(c)) {
42
- const value = JSON.__deserialize<valueof<T>>(lastIndex, srcStart);
43
- store<valueof<T>>(writePtr, value);
44
- writePtr += elementSize;
45
- break;
46
- }
47
- srcStart += 2;
48
- }
49
- }
50
- srcStart += 2;
51
- }
52
-
53
- out.length = i32(<usize>(writePtr - dataStart) / elementSize);
54
- return out;
55
- }
@@ -1,33 +0,0 @@
1
- import { atoi, isSpace } from "../../../util";
2
- import { COMMA, BRACKET_RIGHT } from "../../../custom/chars";
3
-
4
- export function deserializeIntegerArray<T extends number[]>(
5
- srcStart: usize,
6
- srcEnd: usize,
7
- dst: usize,
8
- ): T {
9
- const out = changetype<nonnull<T>>(
10
- dst || changetype<usize>(instantiate<T>()),
11
- );
12
- let lastIndex: usize = 0;
13
- while (srcStart < srcEnd) {
14
- const code = load<u16>(srcStart);
15
- if (code - 48 <= 9 || code == 45) {
16
- lastIndex = srcStart;
17
- srcStart += 2;
18
- while (srcStart < srcEnd) {
19
- const code = load<u16>(srcStart);
20
- if (code == COMMA || code == BRACKET_RIGHT || isSpace(code)) {
21
- out.push(atoi<valueof<T>>(lastIndex, srcStart));
22
- // while (isSpace(load<u16>((srcStart += 2)))) {
23
- // /* empty */
24
- // }
25
- break;
26
- }
27
- srcStart += 2;
28
- }
29
- }
30
- srcStart += 2;
31
- }
32
- return out;
33
- }
@@ -1,29 +0,0 @@
1
- import { JSON } from "../../..";
2
- import { QUOTE } from "../../../custom/chars";
3
- import { isUnescapedQuote } from "../../../util";
4
-
5
- export function deserializeStringArray(
6
- srcStart: usize,
7
- srcEnd: usize,
8
- dst: usize,
9
- ): string[] {
10
- const out = changetype<string[]>(
11
- dst || changetype<usize>(instantiate<string[]>()),
12
- );
13
- let lastPos: usize = 2;
14
- let inString = false;
15
- while (srcStart < srcEnd) {
16
- const code = load<u16>(srcStart);
17
- if (code == QUOTE) {
18
- if (!inString) {
19
- inString = true;
20
- lastPos = srcStart;
21
- } else if (isUnescapedQuote(srcStart)) {
22
- out.push(JSON.__deserialize<string>(lastPos, srcStart + 2));
23
- inString = false;
24
- }
25
- }
26
- srcStart += 2;
27
- }
28
- return out;
29
- }
@@ -1,206 +0,0 @@
1
- import { ptrToStr } from "../../util/ptrToStr";
2
-
3
- // @ts-ignore: inline
4
- @inline function pow10Fast(exponent: u32): f64 {
5
- if (exponent == 0) return 1.0;
6
- if (exponent == 1) return 10.0;
7
- if (exponent == 2) return 100.0;
8
- if (exponent == 3) return 1e3;
9
- if (exponent == 4) return 1e4;
10
- if (exponent == 5) return 1e5;
11
- if (exponent == 6) return 1e6;
12
- if (exponent == 7) return 1e7;
13
- if (exponent == 8) return 1e8;
14
- if (exponent == 9) return 1e9;
15
- if (exponent == 10) return 1e10;
16
- if (exponent == 11) return 1e11;
17
- if (exponent == 12) return 1e12;
18
- if (exponent == 13) return 1e13;
19
- if (exponent == 14) return 1e14;
20
- if (exponent == 15) return 1e15;
21
- if (exponent == 16) return 1e16;
22
- if (exponent == 17) return 1e17;
23
- if (exponent == 18) return 1e18;
24
- let result = 1.0;
25
- if (exponent & 1) result *= 1e1;
26
- if (exponent & 2) result *= 1e2;
27
- if (exponent & 4) result *= 1e4;
28
- if (exponent & 8) result *= 1e8;
29
- if (exponent & 16) result *= 1e16;
30
- if (exponent & 32) result *= 1e32;
31
- if (exponent & 64) result *= 1e64;
32
- if (exponent & 128) result *= 1e128;
33
- if (exponent & 256) result *= 1e256;
34
- return result;
35
- }
36
-
37
- // @ts-ignore: inline
38
- @inline export function deserializeFloat<T>(srcStart: usize, srcEnd: usize): T {
39
- let negative = false;
40
- if (load<u16>(srcStart) == 45) {
41
- negative = true;
42
- srcStart += 2;
43
- if (srcStart >= srcEnd) unreachable();
44
- }
45
-
46
- let value: f64 = 0.0;
47
- let seenDigit = false;
48
-
49
- while (srcStart < srcEnd) {
50
- const digit = <u32>load<u16>(srcStart) - 48;
51
- if (digit > 9) break;
52
- value = value * 10.0 + <f64>digit;
53
- seenDigit = true;
54
- srcStart += 2;
55
- }
56
-
57
- if (srcStart < srcEnd && load<u16>(srcStart) == 46) {
58
- srcStart += 2;
59
- let fraction: u64 = 0;
60
- let digits: u32 = 0;
61
- while (srcStart < srcEnd) {
62
- const digit = <u32>load<u16>(srcStart) - 48;
63
- if (digit > 9) break;
64
- fraction = fraction * 10 + digit;
65
- digits += 1;
66
- seenDigit = true;
67
- srcStart += 2;
68
- }
69
- if (digits != 0) value += <f64>fraction / pow10Fast(digits);
70
- }
71
-
72
- if (!seenDigit) {
73
- // @ts-ignore
74
- const type: T = 0;
75
- // @ts-ignore
76
- if (type instanceof f64) return f64.parse(ptrToStr(srcStart, srcEnd));
77
- // @ts-ignore
78
- return f32.parse(ptrToStr(srcStart, srcEnd));
79
- }
80
-
81
- if (srcStart < srcEnd) {
82
- const code = load<u16>(srcStart);
83
- if (code == 101 || code == 69) {
84
- srcStart += 2;
85
- if (srcStart >= srcEnd) unreachable();
86
-
87
- let exponentNegative = false;
88
- let exponentCode = load<u16>(srcStart);
89
- if (exponentCode == 45 || exponentCode == 43) {
90
- exponentNegative = exponentCode == 45;
91
- srcStart += 2;
92
- if (srcStart >= srcEnd) unreachable();
93
- exponentCode = load<u16>(srcStart);
94
- }
95
-
96
- let exponent = <u32>exponentCode - 48;
97
- if (exponent > 9) unreachable();
98
- srcStart += 2;
99
- while (srcStart < srcEnd) {
100
- const digit = <u32>load<u16>(srcStart) - 48;
101
- if (digit > 9) break;
102
- exponent = exponent * 10 + digit;
103
- srcStart += 2;
104
- }
105
-
106
- const power = pow10Fast(exponent);
107
- value = exponentNegative ? value / power : value * power;
108
- }
109
- }
110
-
111
- if (negative) value = -value;
112
-
113
- // @ts-ignore
114
- const type: T = 0;
115
- // @ts-ignore
116
- if (type instanceof f64) return <T>value;
117
- // @ts-ignore
118
- return <T>(<f32>value);
119
- }
120
-
121
- // @ts-ignore: inline
122
- @inline export function deserializeFloatField<T extends number>(
123
- srcStart: usize,
124
- srcEnd: usize,
125
- dstObj: usize,
126
- dstOffset: usize = 0,
127
- ): usize {
128
- const fieldPtr = dstObj + dstOffset;
129
- let negative = false;
130
- if (load<u16>(srcStart) == 45) {
131
- negative = true;
132
- srcStart += 2;
133
- if (srcStart >= srcEnd) unreachable();
134
- }
135
-
136
- let value: f64 = 0.0;
137
- let seenDigit = false;
138
-
139
- while (srcStart < srcEnd) {
140
- const code = load<u16>(srcStart);
141
- const digit = <u32>code - 48;
142
- if (digit > 9) break;
143
- value = value * 10.0 + <f64>digit;
144
- seenDigit = true;
145
- srcStart += 2;
146
- }
147
-
148
- if (srcStart < srcEnd && load<u16>(srcStart) == 46) {
149
- srcStart += 2;
150
- let fraction: u64 = 0;
151
- let digits: u32 = 0;
152
- while (srcStart < srcEnd) {
153
- const code = load<u16>(srcStart);
154
- const digit = <u32>code - 48;
155
- if (digit > 9) break;
156
- fraction = fraction * 10 + digit;
157
- digits += 1;
158
- seenDigit = true;
159
- srcStart += 2;
160
- }
161
- if (digits != 0) value += <f64>fraction / pow10Fast(digits);
162
- }
163
-
164
- if (!seenDigit) unreachable();
165
-
166
- if (srcStart < srcEnd) {
167
- const code = load<u16>(srcStart);
168
- if (code == 101 || code == 69) {
169
- srcStart += 2;
170
- if (srcStart >= srcEnd) unreachable();
171
-
172
- let exponentNegative = false;
173
- let exponentCode = load<u16>(srcStart);
174
- if (exponentCode == 45 || exponentCode == 43) {
175
- exponentNegative = exponentCode == 45;
176
- srcStart += 2;
177
- if (srcStart >= srcEnd) unreachable();
178
- exponentCode = load<u16>(srcStart);
179
- }
180
-
181
- let exponent = <u32>exponentCode - 48;
182
- if (exponent > 9) unreachable();
183
- srcStart += 2;
184
- while (srcStart < srcEnd) {
185
- const code = load<u16>(srcStart);
186
- const digit = <u32>code - 48;
187
- if (digit > 9) break;
188
- exponent = exponent * 10 + digit;
189
- srcStart += 2;
190
- }
191
-
192
- const power = pow10Fast(exponent);
193
- value = exponentNegative ? value / power : value * power;
194
- }
195
- }
196
-
197
- if (negative) value = -value;
198
-
199
- if (sizeof<T>() == sizeof<f32>()) {
200
- store<f32>(fieldPtr, <f32>value);
201
- } else {
202
- store<f64>(fieldPtr, value);
203
- }
204
-
205
- return srcStart;
206
- }
@@ -1,45 +0,0 @@
1
- import { bs } from "../../../lib/as-bs";
2
- import { DESERIALIZE_ESCAPE_TABLE } from "../../globals/tables";
3
- import { hex4_to_u16_swar } from "../../util/swar";
4
-
5
- // @ts-ignore: inline
6
- @inline export function deserializeString(
7
- srcStart: usize,
8
- srcEnd: usize,
9
- ): string {
10
- // Strip quotes
11
- srcStart += 2;
12
- srcEnd -= 2;
13
- const outStart = bs.offset - bs.buffer;
14
- bs.ensureSize(u32(srcEnd - srcStart));
15
-
16
- while (srcStart < srcEnd) {
17
- const block = load<u16>(srcStart);
18
- store<u16>(bs.offset, block);
19
- srcStart += 2;
20
-
21
- // Early exit
22
- if (block !== 0x5c) {
23
- bs.offset += 2;
24
- continue;
25
- }
26
-
27
- const code = load<u16>(srcStart);
28
- if (code !== 0x75) {
29
- // Short escapes (\n \t \" \\)
30
- const block = load<u16>(srcStart);
31
- const escape = load<u16>(DESERIALIZE_ESCAPE_TABLE + block);
32
- store<u16>(bs.offset, escape);
33
- srcStart += 2;
34
- } else {
35
- // Unicode escape (\uXXXX)
36
- const block = load<u64>(srcStart, 2); // XXXX
37
- const escaped = hex4_to_u16_swar(block);
38
- store<u16>(bs.offset, escaped);
39
- srcStart += 10;
40
- }
41
-
42
- bs.offset += 2;
43
- }
44
- return bs.sliceOut<string>(outStart);
45
- }
@@ -1,79 +0,0 @@
1
- import { JSON } from "../..";
2
- import { bs } from "../../../lib/as-bs";
3
- import { serializeArray } from "./array";
4
- import { serializeBool } from "./bool";
5
- import { serializeFloat32, serializeFloat64 } from "./float";
6
- import { serializeInteger } from "./integer";
7
- import { serializeMap } from "./map";
8
- import { serializeObject } from "./object";
9
- import { serializeString } from "./string";
10
- import { serializeDynamic } from "../index/typedarray";
11
-
12
- export function serializeArbitrary(src: JSON.Value): void {
13
- switch (src.type) {
14
- case JSON.Types.Null:
15
- bs.proposeSize(8);
16
- store<u64>(bs.offset, 30399761348886638);
17
- bs.offset += 8;
18
- break;
19
- case JSON.Types.U8:
20
- serializeInteger<u8>(src.get<u8>());
21
- break;
22
- case JSON.Types.U16:
23
- serializeInteger<u16>(src.get<u16>());
24
- break;
25
- case JSON.Types.U32:
26
- serializeInteger<u32>(src.get<u32>());
27
- break;
28
- case JSON.Types.U64:
29
- serializeInteger<u64>(src.get<u64>());
30
- break;
31
- case JSON.Types.I8:
32
- serializeInteger<i8>(src.get<i8>());
33
- break;
34
- case JSON.Types.I16:
35
- serializeInteger<i16>(src.get<i16>());
36
- break;
37
- case JSON.Types.I32:
38
- serializeInteger<i32>(src.get<i32>());
39
- break;
40
- case JSON.Types.I64:
41
- serializeInteger<i64>(src.get<i64>());
42
- break;
43
- case JSON.Types.F32:
44
- serializeFloat32(src.get<f32>());
45
- break;
46
- case JSON.Types.F64:
47
- serializeFloat64(src.get<f64>());
48
- break;
49
- case JSON.Types.String:
50
- serializeString(src.get<string>());
51
- break;
52
- case JSON.Types.Bool:
53
- serializeBool(src.get<bool>());
54
- break;
55
- case JSON.Types.Array: {
56
- serializeArray(src.get<JSON.Value[]>());
57
- break;
58
- }
59
- case JSON.Types.Object: {
60
- serializeObject(src.get<JSON.Obj>());
61
- break;
62
- }
63
- case JSON.Types.Map: {
64
- serializeMap(src.get<Map<string, JSON.Value>>());
65
- break;
66
- }
67
- case JSON.Types.TypedArray:
68
- case JSON.Types.ArrayBuffer: {
69
- serializeDynamic(src.type, src.get<usize>());
70
- break;
71
- }
72
- default: {
73
- const fn = JSON.Value.METHODS.get(src.type - JSON.Types.Struct);
74
- const ptr = src.get<usize>();
75
- call_indirect<void>(fn, 0, ptr);
76
- break;
77
- }
78
- }
79
- }
@@ -1,42 +0,0 @@
1
- import { bs } from "../../../lib/as-bs";
2
- import { JSON } from "../..";
3
- import { BRACE_LEFT, BRACE_RIGHT, COLON, COMMA } from "../../custom/chars";
4
- import { serializeArbitrary } from "./arbitrary";
5
- import { serializeString_SWAR } from "../swar/string";
6
-
7
- export function serializeObject(src: JSON.Obj): void {
8
- const srcSize = src.size;
9
- const srcEnd = srcSize - 1;
10
-
11
- if (srcSize == 0) {
12
- bs.proposeSize(4);
13
- store<u32>(bs.offset, 8192123);
14
- bs.offset += 4;
15
- return;
16
- }
17
-
18
- const keys = src.keys();
19
- const values = src.values();
20
-
21
- bs.proposeSize(4 + <u32>(srcSize - 1) * 2 + <u32>srcSize * 2);
22
- store<u16>(bs.offset, BRACE_LEFT);
23
- bs.offset += 2;
24
-
25
- for (let i = 0; i < srcEnd; i++) {
26
- serializeString_SWAR(unchecked(keys[i]));
27
- store<u16>(bs.offset, COLON);
28
- bs.offset += 2;
29
-
30
- serializeArbitrary(unchecked(values[i]));
31
- store<u16>(bs.offset, COMMA);
32
- bs.offset += 2;
33
- }
34
-
35
- serializeString_SWAR(unchecked(keys[srcEnd]));
36
- store<u16>(bs.offset, COLON);
37
- bs.offset += 2;
38
- serializeArbitrary(unchecked(values[srcEnd]));
39
-
40
- store<u16>(bs.offset, BRACE_RIGHT);
41
- bs.offset += 2;
42
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes