json-as 1.3.0 → 1.3.2
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 +400 -0
- package/README.md +137 -32
- package/assembly/deserialize/index/arbitrary.ts +1 -1
- package/assembly/deserialize/index/array.ts +6 -1
- package/assembly/deserialize/index/float.ts +1 -1
- package/assembly/deserialize/index/integer.ts +1 -1
- package/assembly/deserialize/index/typedarray.ts +14 -0
- package/assembly/deserialize/index/unsigned.ts +1 -1
- package/assembly/deserialize/simd/string.ts +20 -16
- package/assembly/deserialize/simple/arbitrary.ts +1 -1
- package/assembly/deserialize/simple/array/generic.ts +42 -0
- package/assembly/deserialize/simple/array.ts +8 -1
- package/assembly/deserialize/{float.ts → simple/float.ts} +22 -2
- package/assembly/deserialize/{integer.ts → simple/integer.ts} +3 -2
- package/assembly/deserialize/simple/map.ts +60 -12
- package/assembly/deserialize/simple/object.ts +1 -1
- package/assembly/deserialize/simple/set.ts +119 -134
- package/assembly/deserialize/simple/staticarray.ts +12 -1
- package/assembly/deserialize/simple/string.ts +93 -2
- package/assembly/deserialize/simple/struct.ts +7 -157
- package/assembly/deserialize/simple/typedarray.ts +1 -1
- package/assembly/deserialize/{unsigned.ts → simple/unsigned.ts} +3 -2
- package/assembly/deserialize/swar/array/array.ts +42 -7
- package/assembly/deserialize/swar/array/bool.ts +5 -2
- package/assembly/deserialize/swar/array/float.ts +7 -3
- package/assembly/deserialize/swar/array/generic.ts +40 -0
- package/assembly/deserialize/swar/array/integer.ts +7 -4
- package/assembly/deserialize/swar/array/object.ts +20 -4
- package/assembly/deserialize/swar/array/shared.ts +18 -4
- package/assembly/deserialize/swar/array/string.ts +5 -2
- package/assembly/deserialize/swar/array/struct.ts +20 -4
- package/assembly/deserialize/swar/array.ts +56 -2
- package/assembly/deserialize/swar/string.ts +245 -370
- package/assembly/index.ts +207 -194
- package/assembly/serialize/index/arbitrary.ts +8 -3
- package/assembly/serialize/index/float.ts +1 -1
- package/assembly/serialize/index/object.ts +1 -5
- package/assembly/serialize/index/typedarray.ts +65 -0
- package/assembly/serialize/simd/string.ts +7 -16
- package/assembly/serialize/simple/arbitrary.ts +9 -3
- package/assembly/serialize/simple/array.ts +17 -6
- package/assembly/serialize/simple/float.ts +18 -4
- package/assembly/serialize/simple/map.ts +10 -27
- package/assembly/serialize/simple/object.ts +1 -5
- package/assembly/serialize/simple/set.ts +3 -4
- package/assembly/serialize/simple/staticarray.ts +4 -3
- package/assembly/serialize/simple/string.ts +3 -11
- package/assembly/serialize/simple/typedarray.ts +9 -7
- package/assembly/serialize/swar/string.ts +3 -12
- package/assembly/tsconfig.json +3 -2
- package/assembly/util/dragonbox-cache.ts +1322 -0
- package/assembly/util/dragonbox.ts +596 -0
- package/assembly/util/swar.ts +49 -0
- package/lib/as-bs.ts +92 -70
- package/package.json +35 -10
- package/transform/lib/index.d.ts +1 -0
- package/transform/lib/index.d.ts.map +1 -1
- package/transform/lib/index.js +559 -221
- package/transform/lib/index.js.map +1 -1
- package/transform/lib/linkers/custom.d.ts.map +1 -1
- package/transform/lib/linkers/custom.js +7 -3
- package/transform/lib/linkers/custom.js.map +1 -1
- package/transform/lib/types.d.ts +2 -0
- package/transform/lib/types.d.ts.map +1 -1
- package/transform/lib/types.js +13 -0
- package/transform/lib/types.js.map +1 -1
- package/.as-test/coverage/naive/coverage.arbitrary.spec.ts.log.json +0 -5628
- package/.as-test/coverage/naive/coverage.array.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.bool.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.box.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.custom.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.date.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.enum.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.float.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.generics.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.hierarchy.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.integer.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.map.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.namespace.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.null.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.raw.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.resolving.spec.ts.log.json +0 -5628
- package/.as-test/coverage/naive/coverage.set.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.staticarray.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.string.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.struct.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.types.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.arbitrary.spec.ts.log.json +0 -5628
- package/.as-test/coverage/simd/coverage.array.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.bool.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.box.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.custom.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.date.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.enum.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.float.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.generics.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.hierarchy.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.integer.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.map.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.namespace.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.null.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.raw.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.resolving.spec.ts.log.json +0 -5628
- package/.as-test/coverage/simd/coverage.set.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.staticarray.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.string.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.struct.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.types.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.arbitrary.spec.ts.log.json +0 -5628
- package/.as-test/coverage/swar/coverage.array.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.bool.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.box.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.custom.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.date.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.enum.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.float.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.generics.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.hierarchy.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.integer.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.map.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.namespace.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.null.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.raw.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.resolving.spec.ts.log.json +0 -5628
- package/.as-test/coverage/swar/coverage.set.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.staticarray.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.string.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.struct.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.types.spec.ts.log.json +0 -5187
- package/.as-test/logs/naive/run.arbitrary.spec.ts.log.json +0 -943
- package/.as-test/logs/naive/run.array.spec.ts.log.json +0 -1053
- package/.as-test/logs/naive/run.bool.spec.ts.log.json +0 -257
- package/.as-test/logs/naive/run.box.spec.ts.log.json +0 -353
- package/.as-test/logs/naive/run.custom.spec.ts.log.json +0 -309
- package/.as-test/logs/naive/run.date.spec.ts.log.json +0 -397
- package/.as-test/logs/naive/run.enum.spec.ts.log.json +0 -343
- package/.as-test/logs/naive/run.float.spec.ts.log.json +0 -453
- package/.as-test/logs/naive/run.generics.spec.ts.log.json +0 -393
- package/.as-test/logs/naive/run.hierarchy.spec.ts.log.json +0 -325
- package/.as-test/logs/naive/run.integer.spec.ts.log.json +0 -373
- package/.as-test/logs/naive/run.map.spec.ts.log.json +0 -247
- package/.as-test/logs/naive/run.namespace.spec.ts.log.json +0 -361
- package/.as-test/logs/naive/run.null.spec.ts.log.json +0 -273
- package/.as-test/logs/naive/run.raw.spec.ts.log.json +0 -309
- package/.as-test/logs/naive/run.resolving.spec.ts.log.json +0 -273
- package/.as-test/logs/naive/run.set.spec.ts.log.json +0 -733
- package/.as-test/logs/naive/run.staticarray.spec.ts.log.json +0 -931
- package/.as-test/logs/naive/run.string.spec.ts.log.json +0 -2289
- package/.as-test/logs/naive/run.struct.spec.ts.log.json +0 -523
- package/.as-test/logs/naive/run.types.spec.ts.log.json +0 -273
- package/.as-test/logs/naive/test.arbitrary.spec.ts.log.json +0 -943
- package/.as-test/logs/naive/test.array.spec.ts.log.json +0 -1053
- package/.as-test/logs/naive/test.bool.spec.ts.log.json +0 -257
- package/.as-test/logs/naive/test.box.spec.ts.log.json +0 -353
- package/.as-test/logs/naive/test.custom.spec.ts.log.json +0 -309
- package/.as-test/logs/naive/test.date.spec.ts.log.json +0 -397
- package/.as-test/logs/naive/test.enum.spec.ts.log.json +0 -343
- package/.as-test/logs/naive/test.float.spec.ts.log.json +0 -453
- package/.as-test/logs/naive/test.generics.spec.ts.log.json +0 -393
- package/.as-test/logs/naive/test.hierarchy.spec.ts.log.json +0 -325
- package/.as-test/logs/naive/test.integer.spec.ts.log.json +0 -373
- package/.as-test/logs/naive/test.log.json +0 -2289
- package/.as-test/logs/naive/test.map.spec.ts.log.json +0 -247
- package/.as-test/logs/naive/test.namespace.spec.ts.log.json +0 -361
- package/.as-test/logs/naive/test.null.spec.ts.log.json +0 -273
- package/.as-test/logs/naive/test.raw.spec.ts.log.json +0 -309
- package/.as-test/logs/naive/test.resolving.spec.ts.log.json +0 -273
- package/.as-test/logs/naive/test.set.spec.ts.log.json +0 -733
- package/.as-test/logs/naive/test.staticarray.spec.ts.log.json +0 -931
- package/.as-test/logs/naive/test.string.spec.ts.log.json +0 -2345
- package/.as-test/logs/naive/test.struct.spec.ts.log.json +0 -523
- package/.as-test/logs/naive/test.types.spec.ts.log.json +0 -273
- package/.as-test/logs/simd/run.arbitrary.spec.ts.log.json +0 -943
- package/.as-test/logs/simd/run.array.spec.ts.log.json +0 -1053
- package/.as-test/logs/simd/run.bool.spec.ts.log.json +0 -257
- package/.as-test/logs/simd/run.box.spec.ts.log.json +0 -353
- package/.as-test/logs/simd/run.custom.spec.ts.log.json +0 -309
- package/.as-test/logs/simd/run.date.spec.ts.log.json +0 -397
- package/.as-test/logs/simd/run.enum.spec.ts.log.json +0 -343
- package/.as-test/logs/simd/run.float.spec.ts.log.json +0 -453
- package/.as-test/logs/simd/run.generics.spec.ts.log.json +0 -393
- package/.as-test/logs/simd/run.hierarchy.spec.ts.log.json +0 -325
- package/.as-test/logs/simd/run.integer.spec.ts.log.json +0 -373
- package/.as-test/logs/simd/run.map.spec.ts.log.json +0 -247
- package/.as-test/logs/simd/run.namespace.spec.ts.log.json +0 -361
- package/.as-test/logs/simd/run.null.spec.ts.log.json +0 -273
- package/.as-test/logs/simd/run.raw.spec.ts.log.json +0 -309
- package/.as-test/logs/simd/run.resolving.spec.ts.log.json +0 -273
- package/.as-test/logs/simd/run.set.spec.ts.log.json +0 -733
- package/.as-test/logs/simd/run.staticarray.spec.ts.log.json +0 -931
- package/.as-test/logs/simd/run.string.spec.ts.log.json +0 -2289
- package/.as-test/logs/simd/run.struct.spec.ts.log.json +0 -523
- package/.as-test/logs/simd/run.types.spec.ts.log.json +0 -273
- package/.as-test/logs/simd/test.arbitrary.spec.ts.log.json +0 -943
- package/.as-test/logs/simd/test.array.spec.ts.log.json +0 -1053
- package/.as-test/logs/simd/test.bool.spec.ts.log.json +0 -257
- package/.as-test/logs/simd/test.box.spec.ts.log.json +0 -353
- package/.as-test/logs/simd/test.custom.spec.ts.log.json +0 -309
- package/.as-test/logs/simd/test.date.spec.ts.log.json +0 -397
- package/.as-test/logs/simd/test.enum.spec.ts.log.json +0 -343
- package/.as-test/logs/simd/test.float.spec.ts.log.json +0 -453
- package/.as-test/logs/simd/test.generics.spec.ts.log.json +0 -393
- package/.as-test/logs/simd/test.hierarchy.spec.ts.log.json +0 -325
- package/.as-test/logs/simd/test.integer.spec.ts.log.json +0 -373
- package/.as-test/logs/simd/test.log.json +0 -11371
- package/.as-test/logs/simd/test.map.spec.ts.log.json +0 -247
- package/.as-test/logs/simd/test.namespace.spec.ts.log.json +0 -361
- package/.as-test/logs/simd/test.null.spec.ts.log.json +0 -273
- package/.as-test/logs/simd/test.raw.spec.ts.log.json +0 -309
- package/.as-test/logs/simd/test.resolving.spec.ts.log.json +0 -273
- package/.as-test/logs/simd/test.set.spec.ts.log.json +0 -733
- package/.as-test/logs/simd/test.staticarray.spec.ts.log.json +0 -931
- package/.as-test/logs/simd/test.string.spec.ts.log.json +0 -2345
- package/.as-test/logs/simd/test.struct.spec.ts.log.json +0 -523
- package/.as-test/logs/simd/test.types.spec.ts.log.json +0 -273
- package/.as-test/logs/swar/run.arbitrary.spec.ts.log.json +0 -943
- package/.as-test/logs/swar/run.array.spec.ts.log.json +0 -1053
- package/.as-test/logs/swar/run.bool.spec.ts.log.json +0 -257
- package/.as-test/logs/swar/run.box.spec.ts.log.json +0 -353
- package/.as-test/logs/swar/run.custom.spec.ts.log.json +0 -309
- package/.as-test/logs/swar/run.date.spec.ts.log.json +0 -397
- package/.as-test/logs/swar/run.enum.spec.ts.log.json +0 -343
- package/.as-test/logs/swar/run.float.spec.ts.log.json +0 -453
- package/.as-test/logs/swar/run.generics.spec.ts.log.json +0 -393
- package/.as-test/logs/swar/run.hierarchy.spec.ts.log.json +0 -325
- package/.as-test/logs/swar/run.integer.spec.ts.log.json +0 -373
- package/.as-test/logs/swar/run.map.spec.ts.log.json +0 -247
- package/.as-test/logs/swar/run.namespace.spec.ts.log.json +0 -361
- package/.as-test/logs/swar/run.null.spec.ts.log.json +0 -273
- package/.as-test/logs/swar/run.raw.spec.ts.log.json +0 -309
- package/.as-test/logs/swar/run.resolving.spec.ts.log.json +0 -273
- package/.as-test/logs/swar/run.set.spec.ts.log.json +0 -733
- package/.as-test/logs/swar/run.staticarray.spec.ts.log.json +0 -931
- package/.as-test/logs/swar/run.string.spec.ts.log.json +0 -2289
- package/.as-test/logs/swar/run.struct.spec.ts.log.json +0 -523
- package/.as-test/logs/swar/run.types.spec.ts.log.json +0 -273
- package/.as-test/logs/swar/test.arbitrary.spec.ts.log.json +0 -943
- package/.as-test/logs/swar/test.array.spec.ts.log.json +0 -1053
- package/.as-test/logs/swar/test.bool.spec.ts.log.json +0 -257
- package/.as-test/logs/swar/test.box.spec.ts.log.json +0 -353
- package/.as-test/logs/swar/test.custom.spec.ts.log.json +0 -309
- package/.as-test/logs/swar/test.date.spec.ts.log.json +0 -397
- package/.as-test/logs/swar/test.enum.spec.ts.log.json +0 -343
- package/.as-test/logs/swar/test.float.spec.ts.log.json +0 -453
- package/.as-test/logs/swar/test.generics.spec.ts.log.json +0 -393
- package/.as-test/logs/swar/test.hierarchy.spec.ts.log.json +0 -325
- package/.as-test/logs/swar/test.integer.spec.ts.log.json +0 -373
- package/.as-test/logs/swar/test.log.json +0 -11371
- package/.as-test/logs/swar/test.map.spec.ts.log.json +0 -247
- package/.as-test/logs/swar/test.namespace.spec.ts.log.json +0 -361
- package/.as-test/logs/swar/test.null.spec.ts.log.json +0 -273
- package/.as-test/logs/swar/test.raw.spec.ts.log.json +0 -309
- package/.as-test/logs/swar/test.resolving.spec.ts.log.json +0 -273
- package/.as-test/logs/swar/test.set.spec.ts.log.json +0 -733
- package/.as-test/logs/swar/test.staticarray.spec.ts.log.json +0 -931
- package/.as-test/logs/swar/test.string.spec.ts.log.json +0 -2345
- package/.as-test/logs/swar/test.struct.spec.ts.log.json +0 -523
- package/.as-test/logs/swar/test.types.spec.ts.log.json +0 -273
- package/.as-test/logs/test.arbitrary.spec.ts.log.json +0 -943
- package/.as-test/logs/test.array.spec.ts.log.json +0 -1053
- package/.as-test/logs/test.bool.spec.ts.log.json +0 -257
- package/.as-test/logs/test.box.spec.ts.log.json +0 -353
- package/.as-test/logs/test.custom.spec.ts.log.json +0 -309
- package/.as-test/logs/test.date.spec.ts.log.json +0 -397
- package/.as-test/logs/test.enum.spec.ts.log.json +0 -343
- package/.as-test/logs/test.float.spec.ts.log.json +0 -453
- package/.as-test/logs/test.generics.spec.ts.log.json +0 -393
- package/.as-test/logs/test.hierarchy.spec.ts.log.json +0 -325
- package/.as-test/logs/test.integer.spec.ts.log.json +0 -373
- package/.as-test/logs/test.log.json +0 -11371
- package/.as-test/logs/test.map.spec.ts.log.json +0 -247
- package/.as-test/logs/test.namespace.spec.ts.log.json +0 -361
- package/.as-test/logs/test.null.spec.ts.log.json +0 -273
- package/.as-test/logs/test.raw.spec.ts.log.json +0 -309
- package/.as-test/logs/test.resolving.spec.ts.log.json +0 -273
- package/.as-test/logs/test.set.spec.ts.log.json +0 -733
- package/.as-test/logs/test.staticarray.spec.ts.log.json +0 -931
- package/.as-test/logs/test.string.spec.ts.log.json +0 -2289
- package/.as-test/logs/test.struct.spec.ts.log.json +0 -523
- package/.as-test/logs/test.types.spec.ts.log.json +0 -273
- package/.as-test/runners/default.bindings.js +0 -68
- package/.as-test/runners/default.wasi.js +0 -38
- package/ARCHITECTURE.md +0 -323
- package/CONTRIBUTING.md +0 -244
- package/TODO +0 -1
- package/as-test.config.json +0 -40
- package/assembly/test.ts +0 -24
- package/eslint.config.js +0 -68
- package/lib/tsconfig.json +0 -8
- package/test.ts +0 -99
- package/tools/assemblyscript-eslint-local.js +0 -6
- package/tools/assemblyscript-eslint.js +0 -53
- package/tools/assemblyscript-prettier-plugin.js +0 -33
- package/tools/replacer.js +0 -63
- package/transform/tsconfig.json +0 -35
|
@@ -4,6 +4,7 @@ import { deserializeArrayArray } from "../simple/array/array";
|
|
|
4
4
|
import { deserializeBooleanArray } from "../simple/array/bool";
|
|
5
5
|
import { deserializeBoxArray } from "../simple/array/box";
|
|
6
6
|
import { deserializeFloatArray } from "../simple/array/float";
|
|
7
|
+
import { deserializeGenericArray } from "../simple/array/generic";
|
|
7
8
|
import { deserializeIntegerArray as deserializeIntegerArray_NAIVE } from "../simple/array/integer";
|
|
8
9
|
import { deserializeMapArray } from "../simple/array/map";
|
|
9
10
|
import { deserializeObjectArray } from "../simple/array/object";
|
|
@@ -45,13 +46,17 @@ export function deserializeArray<T extends unknown[]>(srcStart: usize, srcEnd: u
|
|
|
45
46
|
return deserializeObjectArray<T>(srcStart, srcEnd, dst);
|
|
46
47
|
} else if (type instanceof JSON.Raw) {
|
|
47
48
|
return deserializeRawArray(srcStart, srcEnd, dst) as T;
|
|
49
|
+
} else if (type instanceof Date) {
|
|
50
|
+
return deserializeGenericArray<T>(srcStart, srcEnd, dst);
|
|
51
|
+
} else if (type instanceof Set) {
|
|
52
|
+
return deserializeGenericArray<T>(srcStart, srcEnd, dst);
|
|
48
53
|
} else if (type instanceof Map) {
|
|
49
54
|
return deserializeMapArray<T>(srcStart, srcEnd, dst);
|
|
50
55
|
// @ts-ignore: defined by transform
|
|
51
56
|
} else if (isDefined(type.__DESERIALIZE_CUSTOM)) {
|
|
52
57
|
return deserializeStructArray<T>(srcStart, srcEnd, dst);
|
|
53
58
|
// @ts-ignore: defined by transform
|
|
54
|
-
} else if (isDefined(type.
|
|
59
|
+
} else if (isDefined(type.__DESERIALIZE_SLOW) || isDefined(type.__DESERIALIZE_FAST)) {
|
|
55
60
|
return deserializeStructArray<T>(srcStart, srcEnd, dst);
|
|
56
61
|
}
|
|
57
62
|
throw new Error("Could not parse array of type " + nameof<T>() + "!");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { deserializeFloat } from "../float";
|
|
1
|
+
export { deserializeFloat } from "../simple/float";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { deserializeInteger } from "../integer";
|
|
1
|
+
export { deserializeInteger } from "../simple/integer";
|
|
@@ -1 +1,15 @@
|
|
|
1
|
+
import { bytes } from "../../util";
|
|
1
2
|
export { deserializeArrayBuffer, deserializeTypedArray } from "../simple/typedarray";
|
|
3
|
+
import { deserializeArrayBuffer, deserializeTypedArray } from "../simple/typedarray";
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@inline export function parseArrayBuffer(data: string): ArrayBuffer {
|
|
7
|
+
const dataSize = bytes(data);
|
|
8
|
+
const dataPtr = changetype<usize>(data);
|
|
9
|
+
return deserializeArrayBuffer(dataPtr, dataPtr + dataSize, 0);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@inline export function __deserializeArrayBuffer(srcStart: usize, srcEnd: usize, dst: usize = 0): ArrayBuffer {
|
|
14
|
+
return deserializeArrayBuffer(srcStart, srcEnd, dst);
|
|
15
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { deserializeUnsigned } from "../unsigned";
|
|
1
|
+
export { deserializeUnsigned } from "../simple/unsigned";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { bs } from "../../../lib/as-bs";
|
|
2
2
|
import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
|
|
3
|
+
import { __heap_base } from "memory";
|
|
3
4
|
import { QUOTE } from "../../custom/chars";
|
|
4
5
|
import { BACK_SLASH } from "../../custom/chars";
|
|
5
6
|
import { DESERIALIZE_ESCAPE_TABLE, ESCAPE_HEX_TABLE } from "../../globals/tables";
|
|
@@ -81,11 +82,13 @@ import { deserializeStringField_SWAR } from "../swar/string";
|
|
|
81
82
|
|
|
82
83
|
const current = load<usize>(dstFieldPtr);
|
|
83
84
|
let stringPtr: usize;
|
|
84
|
-
if (current
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
if (current >= __heap_base) {
|
|
86
|
+
if (changetype<OBJECT>(current - TOTAL_OVERHEAD).rtSize == byteLength) {
|
|
87
|
+
stringPtr = current;
|
|
88
|
+
} else {
|
|
89
|
+
stringPtr = __renew(current, byteLength);
|
|
90
|
+
store<usize>(dstFieldPtr, stringPtr);
|
|
91
|
+
}
|
|
89
92
|
} else {
|
|
90
93
|
stringPtr = __new(byteLength, idof<string>());
|
|
91
94
|
store<usize>(dstFieldPtr, stringPtr);
|
|
@@ -93,16 +96,18 @@ import { deserializeStringField_SWAR } from "../swar/string";
|
|
|
93
96
|
memory.copy(stringPtr, srcStart, byteLength);
|
|
94
97
|
}
|
|
95
98
|
|
|
99
|
+
// @ts-expect-error: @inline is a valid decorator
|
|
100
|
+
|
|
96
101
|
// todo: optimize and stuff. it works, its not pretty. ideally, i'd like this to be (nearly) branchless
|
|
97
102
|
// @ts-expect-error: @inline is a valid decorator
|
|
98
103
|
@inline function deserializeEscapedString_SIMD(payloadStart: usize, escapeStart: usize, srcEnd: usize): string {
|
|
99
104
|
const prefixLen = <u32>(escapeStart - payloadStart);
|
|
100
105
|
let srcStart = escapeStart;
|
|
101
106
|
const srcEnd16 = srcEnd - 16;
|
|
107
|
+
const outStart = bs.offset - bs.buffer;
|
|
102
108
|
bs.ensureSize(u32(srcEnd - srcStart));
|
|
103
|
-
bs.offset = bs.buffer;
|
|
104
109
|
if (prefixLen != 0) {
|
|
105
|
-
memory.copy(bs.
|
|
110
|
+
memory.copy(bs.offset, payloadStart, prefixLen);
|
|
106
111
|
bs.offset += prefixLen;
|
|
107
112
|
}
|
|
108
113
|
|
|
@@ -111,16 +116,14 @@ import { deserializeStringField_SWAR } from "../swar/string";
|
|
|
111
116
|
store<v128>(bs.offset, block);
|
|
112
117
|
|
|
113
118
|
const eq5C = i16x8.eq(block, SPLAT_5C);
|
|
119
|
+
let mask = i16x8.bitmask(eq5C);
|
|
114
120
|
|
|
115
|
-
|
|
116
|
-
if (!v128.any_true(eq5C)) {
|
|
121
|
+
if (mask == 0) {
|
|
117
122
|
srcStart += 16;
|
|
118
123
|
bs.offset += 16;
|
|
119
124
|
continue;
|
|
120
125
|
}
|
|
121
126
|
|
|
122
|
-
let mask = i16x8.bitmask(eq5C);
|
|
123
|
-
|
|
124
127
|
let srcChg: usize = 0;
|
|
125
128
|
let lastLane: usize = 0;
|
|
126
129
|
do {
|
|
@@ -195,7 +198,7 @@ import { deserializeStringField_SWAR } from "../swar/string";
|
|
|
195
198
|
bs.offset += 2;
|
|
196
199
|
}
|
|
197
200
|
|
|
198
|
-
return bs.
|
|
201
|
+
return bs.sliceOut<string>(outStart);
|
|
199
202
|
}
|
|
200
203
|
|
|
201
204
|
export function deserializeString_SIMD(srcStart: usize, srcEnd: usize): string {
|
|
@@ -207,14 +210,14 @@ export function deserializeString_SIMD(srcStart: usize, srcEnd: usize): string {
|
|
|
207
210
|
|
|
208
211
|
while (srcStart < srcEnd16) {
|
|
209
212
|
const block = load<v128>(srcStart);
|
|
210
|
-
const
|
|
213
|
+
const mask = i16x8.bitmask(i16x8.eq(block, SPLAT_5C));
|
|
211
214
|
|
|
212
|
-
if (
|
|
215
|
+
if (mask == 0) {
|
|
213
216
|
srcStart += 16;
|
|
214
217
|
continue;
|
|
215
218
|
}
|
|
216
219
|
|
|
217
|
-
const laneIdx = usize(ctz(
|
|
220
|
+
const laneIdx = usize(ctz(mask) << 1);
|
|
218
221
|
return inline.always(deserializeEscapedString_SIMD(payloadStart, srcStart + laneIdx, srcEnd));
|
|
219
222
|
}
|
|
220
223
|
|
|
@@ -229,7 +232,8 @@ export function deserializeString_SIMD(srcStart: usize, srcEnd: usize): string {
|
|
|
229
232
|
}
|
|
230
233
|
|
|
231
234
|
// @ts-expect-error: @inline is a valid decorator
|
|
232
|
-
@inline export function deserializeStringField_SIMD<T extends string | null>(srcStart: usize, srcEnd: usize,
|
|
235
|
+
@inline export function deserializeStringField_SIMD<T extends string | null>(srcStart: usize, srcEnd: usize, dstObj: usize, dstOffset: usize = 0): usize {
|
|
236
|
+
const dstFieldPtr = dstObj + dstOffset;
|
|
233
237
|
if (srcStart + 2 > srcEnd || load<u16>(srcStart) != QUOTE) abort("Expected leading quote");
|
|
234
238
|
|
|
235
239
|
const quotedStart = srcStart;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { JSON } from "../..";
|
|
2
2
|
import { deserializeArray } from "./array";
|
|
3
3
|
import { deserializeBoolean } from "./bool";
|
|
4
|
-
import { deserializeFloat } from "
|
|
4
|
+
import { deserializeFloat } from "./float";
|
|
5
5
|
import { deserializeString } from "./string";
|
|
6
6
|
import { deserializeObject } from "./object";
|
|
7
7
|
import { BRACE_LEFT, BRACKET_LEFT, CHAR_N, QUOTE } from "../../custom/chars";
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { JSON } from "../../..";
|
|
2
|
+
import { BRACKET_LEFT, BRACKET_RIGHT, COMMA } from "../../../custom/chars";
|
|
3
|
+
import { isSpace } from "../../../util";
|
|
4
|
+
import { scanValueEnd } from "../../swar/array/shared";
|
|
5
|
+
|
|
6
|
+
export function deserializeGenericArray<T extends unknown[]>(srcStart: usize, srcEnd: usize, dst: usize): T {
|
|
7
|
+
const out = changetype<nonnull<T>>(dst || changetype<usize>(instantiate<T>()));
|
|
8
|
+
out.length = 0;
|
|
9
|
+
|
|
10
|
+
while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
|
|
11
|
+
while (srcEnd > srcStart && isSpace(load<u16>(srcEnd - 2))) srcEnd -= 2;
|
|
12
|
+
|
|
13
|
+
if (srcStart >= srcEnd) throw new Error("Input string had zero length or was all whitespace");
|
|
14
|
+
if (load<u16>(srcStart) != BRACKET_LEFT) throw new Error("Expected '[' at start of array");
|
|
15
|
+
srcStart += 2;
|
|
16
|
+
|
|
17
|
+
while (srcStart < srcEnd) {
|
|
18
|
+
while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
|
|
19
|
+
if (srcStart >= srcEnd) break;
|
|
20
|
+
|
|
21
|
+
if (load<u16>(srcStart) == BRACKET_RIGHT) return out;
|
|
22
|
+
|
|
23
|
+
const valueEnd = scanValueEnd(srcStart, srcEnd);
|
|
24
|
+
if (!valueEnd || valueEnd <= srcStart) break;
|
|
25
|
+
|
|
26
|
+
out.push(JSON.__deserialize<valueof<T>>(srcStart, valueEnd));
|
|
27
|
+
srcStart = valueEnd;
|
|
28
|
+
|
|
29
|
+
while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
|
|
30
|
+
if (srcStart >= srcEnd) break;
|
|
31
|
+
|
|
32
|
+
const code = load<u16>(srcStart);
|
|
33
|
+
if (code == COMMA) {
|
|
34
|
+
srcStart += 2;
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (code == BRACKET_RIGHT) return out;
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
throw new Error("Failed to parse JSON!");
|
|
42
|
+
}
|
|
@@ -3,6 +3,7 @@ import { deserializeArbitraryArray } from "./array/arbitrary";
|
|
|
3
3
|
import { deserializeArrayArray } from "./array/array";
|
|
4
4
|
import { deserializeBooleanArray } from "./array/bool";
|
|
5
5
|
import { deserializeFloatArray } from "./array/float";
|
|
6
|
+
import { deserializeGenericArray } from "./array/generic";
|
|
6
7
|
import { deserializeIntegerArray } from "./array/integer";
|
|
7
8
|
import { deserializeMapArray } from "./array/map";
|
|
8
9
|
import { deserializeStructArray } from "./array/struct";
|
|
@@ -42,6 +43,12 @@ export function deserializeArray<T extends unknown[]>(srcStart: usize, srcEnd: u
|
|
|
42
43
|
} else if (type instanceof JSON.Raw) {
|
|
43
44
|
// @ts-ignore: type
|
|
44
45
|
return deserializeRawArray(srcStart, srcEnd, dst);
|
|
46
|
+
} else if (type instanceof Date) {
|
|
47
|
+
// @ts-ignore: type
|
|
48
|
+
return deserializeGenericArray<T>(srcStart, srcEnd, dst);
|
|
49
|
+
} else if (type instanceof Set) {
|
|
50
|
+
// @ts-ignore: type
|
|
51
|
+
return deserializeGenericArray<T>(srcStart, srcEnd, dst);
|
|
45
52
|
} else if (type instanceof Map) {
|
|
46
53
|
// @ts-ignore: type
|
|
47
54
|
return deserializeMapArray<T>(srcStart, srcEnd, dst);
|
|
@@ -49,7 +56,7 @@ export function deserializeArray<T extends unknown[]>(srcStart: usize, srcEnd: u
|
|
|
49
56
|
} else if (isDefined(type.__DESERIALIZE_CUSTOM)) {
|
|
50
57
|
return deserializeStructArray<T>(srcStart, srcEnd, dst);
|
|
51
58
|
// @ts-ignore: defined by transform
|
|
52
|
-
} else if (isDefined(type.
|
|
59
|
+
} else if (isDefined(type.__DESERIALIZE_SLOW) || isDefined(type.__DESERIALIZE_FAST)) {
|
|
53
60
|
return deserializeStructArray<T>(srcStart, srcEnd, dst);
|
|
54
61
|
}
|
|
55
62
|
throw new Error("Could not parse array of type " + nameof<T>() + "!");
|
|
@@ -1,7 +1,26 @@
|
|
|
1
|
-
import { ptrToStr } from "
|
|
1
|
+
import { ptrToStr } from "../../util/ptrToStr";
|
|
2
2
|
|
|
3
3
|
// @ts-ignore: inline
|
|
4
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;
|
|
5
24
|
let result = 1.0;
|
|
6
25
|
if (exponent & 1) result *= 1e1;
|
|
7
26
|
if (exponent & 2) result *= 1e2;
|
|
@@ -100,7 +119,8 @@ import { ptrToStr } from "../util/ptrToStr";
|
|
|
100
119
|
}
|
|
101
120
|
|
|
102
121
|
// @ts-ignore: inline
|
|
103
|
-
@inline export function deserializeFloatField<T extends number>(srcStart: usize, srcEnd: usize,
|
|
122
|
+
@inline export function deserializeFloatField<T extends number>(srcStart: usize, srcEnd: usize, dstObj: usize, dstOffset: usize = 0): usize {
|
|
123
|
+
const fieldPtr = dstObj + dstOffset;
|
|
104
124
|
let negative = false;
|
|
105
125
|
if (load<u16>(srcStart) == 45) {
|
|
106
126
|
negative = true;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { atoi } from "
|
|
1
|
+
import { atoi } from "../../util/atoi";
|
|
2
2
|
|
|
3
3
|
// @ts-ignore: inline
|
|
4
4
|
@inline export function deserializeInteger<T>(srcStart: usize, srcEnd: usize): T {
|
|
@@ -6,7 +6,8 @@ import { atoi } from "../util/atoi";
|
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
// @ts-ignore: inline
|
|
9
|
-
@inline export function deserializeIntegerField<T extends number>(srcStart: usize, srcEnd: usize,
|
|
9
|
+
@inline export function deserializeIntegerField<T extends number>(srcStart: usize, srcEnd: usize, dstObj: usize, dstOffset: usize = 0): usize {
|
|
10
|
+
const fieldPtr = dstObj + dstOffset;
|
|
10
11
|
let negative = false;
|
|
11
12
|
if (load<u16>(srcStart) == 45) {
|
|
12
13
|
negative = true;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { JSON } from "../..";
|
|
2
2
|
import { BACK_SLASH, COMMA, CHAR_F, BRACE_LEFT, BRACKET_LEFT, CHAR_N, QUOTE, BRACE_RIGHT, BRACKET_RIGHT, CHAR_T, COLON } from "../../custom/chars";
|
|
3
3
|
import { isSpace, isUnescapedQuote, scanStringEnd } from "../../util";
|
|
4
|
+
import { scanValueEnd } from "../swar/array/shared";
|
|
4
5
|
|
|
5
6
|
// @ts-ignore: Decorator is valid here
|
|
6
|
-
@inline function
|
|
7
|
-
|
|
8
|
-
return
|
|
7
|
+
@inline function deserializeMapKey<T>(start: usize, end: usize): T {
|
|
8
|
+
const keyText = JSON.__deserialize<string>(start - 2, end + 2);
|
|
9
|
+
if (isString<T>()) return changetype<T>(keyText);
|
|
10
|
+
return JSON.parse<T>(keyText);
|
|
9
11
|
}
|
|
10
12
|
|
|
11
13
|
export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd: usize, dst: usize): T {
|
|
12
14
|
const out = changetype<nonnull<T>>(dst || changetype<usize>(instantiate<T>()));
|
|
13
|
-
// @ts-ignore: type
|
|
14
|
-
if (!isString<indexof<T>>() && !isInteger<indexof<T>>() && !isFloat<indexof<T>>()) throw new Error("Map key must also be a valid JSON key!");
|
|
15
15
|
|
|
16
16
|
let keyStart: usize = 0;
|
|
17
17
|
let keyEnd: usize = 0;
|
|
@@ -53,7 +53,7 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
|
|
|
53
53
|
srcStart = scanStringEnd(srcStart, srcEnd);
|
|
54
54
|
if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
|
|
55
55
|
// @ts-ignore: type
|
|
56
|
-
out.set(
|
|
56
|
+
out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, srcStart + 2));
|
|
57
57
|
srcStart += 2;
|
|
58
58
|
keyStart = 0;
|
|
59
59
|
continue;
|
|
@@ -65,7 +65,7 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
|
|
|
65
65
|
if (code == COMMA || code == BRACE_RIGHT || isSpace(code)) {
|
|
66
66
|
// console.log("Value (number): " + ptrToStr(lastIndex, srcStart));
|
|
67
67
|
// @ts-ignore: type
|
|
68
|
-
out.set(
|
|
68
|
+
out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, srcStart));
|
|
69
69
|
// while (isSpace(load<u16>((srcStart += 2)))) {
|
|
70
70
|
// /* empty */
|
|
71
71
|
// }
|
|
@@ -89,7 +89,7 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
|
|
|
89
89
|
if (--depth == 0) {
|
|
90
90
|
// console.log("Value (object): " + ptrToStr(lastIndex, srcStart + 2));
|
|
91
91
|
// @ts-ignore: type
|
|
92
|
-
out.set(
|
|
92
|
+
out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, (srcStart += 2)));
|
|
93
93
|
// console.log("Next: " + String.fromCharCode(load<u16>(srcStart)));
|
|
94
94
|
keyStart = 0;
|
|
95
95
|
// while (isSpace(load<u16>(srcStart))) {
|
|
@@ -113,7 +113,7 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
|
|
|
113
113
|
if (--depth == 0) {
|
|
114
114
|
// console.log("Value (array): " + ptrToStr(lastIndex, srcStart + 2));
|
|
115
115
|
// @ts-ignore: type
|
|
116
|
-
out.set(
|
|
116
|
+
out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, (srcStart += 2)));
|
|
117
117
|
// console.log("Next: " + String.fromCharCode(load<u16>(srcStart)));
|
|
118
118
|
keyStart = 0;
|
|
119
119
|
// while (isSpace(load<u16>((srcStart += 2)))) {
|
|
@@ -128,7 +128,7 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
|
|
|
128
128
|
if (load<u64>(srcStart) == 28429475166421108) {
|
|
129
129
|
// console.log("Value (bool): " + ptrToStr(srcStart, srcStart + 8));
|
|
130
130
|
// @ts-ignore: type
|
|
131
|
-
out.set(
|
|
131
|
+
out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(srcStart, (srcStart += 8)));
|
|
132
132
|
// while (isSpace(load<u16>((srcStart += 2)))) {
|
|
133
133
|
// /* empty */
|
|
134
134
|
// }
|
|
@@ -140,7 +140,7 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
|
|
|
140
140
|
if (load<u64>(srcStart, 2) == 28429466576093281) {
|
|
141
141
|
// console.log("Value (bool): " + ptrToStr(srcStart, srcStart + 10));
|
|
142
142
|
// @ts-ignore: type
|
|
143
|
-
out.set(
|
|
143
|
+
out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(srcStart, (srcStart += 10)));
|
|
144
144
|
// while (isSpace(load<u16>((srcStart += 2)))) {
|
|
145
145
|
// /* empty */
|
|
146
146
|
// }
|
|
@@ -152,7 +152,7 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
|
|
|
152
152
|
if (load<u64>(srcStart) == 30399761348886638) {
|
|
153
153
|
// console.log("Value (null): " + ptrToStr(srcStart, srcStart + 8));
|
|
154
154
|
// @ts-ignore: type
|
|
155
|
-
out.set(
|
|
155
|
+
out.set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(srcStart, (srcStart += 8)));
|
|
156
156
|
// while (isSpace(load<u16>((srcStart += 2)))) {
|
|
157
157
|
/* empty */
|
|
158
158
|
// }
|
|
@@ -169,3 +169,51 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
|
|
|
169
169
|
}
|
|
170
170
|
return out;
|
|
171
171
|
}
|
|
172
|
+
|
|
173
|
+
@inline export function deserializeMapInto<T extends Map<any, any>>(srcStart: usize, srcEnd: usize, out: T): usize {
|
|
174
|
+
changetype<nonnull<T>>(out).clear();
|
|
175
|
+
|
|
176
|
+
if (srcStart >= srcEnd || load<u16>(srcStart) != BRACE_LEFT) throw new Error("Failed to parse JSON!");
|
|
177
|
+
srcStart += 2;
|
|
178
|
+
if (srcStart >= srcEnd) throw new Error("Failed to parse JSON!");
|
|
179
|
+
if (load<u16>(srcStart) == BRACE_RIGHT) return srcStart + 2;
|
|
180
|
+
|
|
181
|
+
while (srcStart < srcEnd) {
|
|
182
|
+
if (load<u16>(srcStart) != QUOTE) break;
|
|
183
|
+
|
|
184
|
+
const keyStart = srcStart + 2;
|
|
185
|
+
const keyEnd = scanStringEnd(srcStart, srcEnd);
|
|
186
|
+
if (keyEnd >= srcEnd) break;
|
|
187
|
+
|
|
188
|
+
srcStart = keyEnd + 2;
|
|
189
|
+
if (srcStart >= srcEnd || load<u16>(srcStart) != COLON) break;
|
|
190
|
+
srcStart += 2;
|
|
191
|
+
|
|
192
|
+
const valueEnd = scanValueEnd(srcStart, srcEnd);
|
|
193
|
+
if (!valueEnd || valueEnd <= srcStart) break;
|
|
194
|
+
|
|
195
|
+
// @ts-ignore: type
|
|
196
|
+
changetype<nonnull<T>>(out).set(deserializeMapKey<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(srcStart, valueEnd));
|
|
197
|
+
srcStart = valueEnd;
|
|
198
|
+
|
|
199
|
+
if (srcStart >= srcEnd) break;
|
|
200
|
+
const code = load<u16>(srcStart);
|
|
201
|
+
if (code == COMMA) {
|
|
202
|
+
srcStart += 2;
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
if (code == BRACE_RIGHT) return srcStart + 2;
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
throw new Error("Failed to parse JSON!");
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
@inline export function deserializeMapField<T extends Map<any, any>>(srcStart: usize, srcEnd: usize, dstObj: usize, dstOffset: usize = 0): usize {
|
|
213
|
+
let out = load<T>(dstObj, dstOffset);
|
|
214
|
+
if (!changetype<usize>(out)) {
|
|
215
|
+
out = changetype<T>(instantiate<T>());
|
|
216
|
+
store<T>(dstObj, out, dstOffset);
|
|
217
|
+
}
|
|
218
|
+
return deserializeMapInto<T>(srcStart, srcEnd, out);
|
|
219
|
+
}
|
|
@@ -7,7 +7,7 @@ import { deserializeString_SWAR } from "../swar/string";
|
|
|
7
7
|
import { deserializeArbitrary } from "./arbitrary";
|
|
8
8
|
import { deserializeArray } from "./array";
|
|
9
9
|
import { deserializeBoolean } from "./bool";
|
|
10
|
-
import { deserializeFloat } from "
|
|
10
|
+
import { deserializeFloat } from "./float";
|
|
11
11
|
import { deserializeString } from "./string";
|
|
12
12
|
|
|
13
13
|
export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): JSON.Obj {
|