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
|
@@ -18,29 +18,25 @@ export function serializeObject(src: JSON.Obj): void {
|
|
|
18
18
|
const keys = src.keys();
|
|
19
19
|
const values = src.values();
|
|
20
20
|
|
|
21
|
-
bs.
|
|
21
|
+
bs.proposeSize(4 + <u32>(srcSize - 1) * 2 + <u32>srcSize * 2);
|
|
22
22
|
store<u16>(bs.offset, BRACE_LEFT);
|
|
23
23
|
bs.offset += 2;
|
|
24
24
|
|
|
25
25
|
for (let i = 0; i < srcEnd; i++) {
|
|
26
26
|
serializeString(unchecked(keys[i]));
|
|
27
|
-
bs.growSize(2);
|
|
28
27
|
store<u16>(bs.offset, COLON);
|
|
29
28
|
bs.offset += 2;
|
|
30
29
|
|
|
31
30
|
serializeArbitrary(unchecked(values[i]));
|
|
32
|
-
bs.growSize(2);
|
|
33
31
|
store<u16>(bs.offset, COMMA);
|
|
34
32
|
bs.offset += 2;
|
|
35
33
|
}
|
|
36
34
|
|
|
37
35
|
serializeString(unchecked(keys[srcEnd]));
|
|
38
|
-
bs.growSize(2);
|
|
39
36
|
store<u16>(bs.offset, COLON);
|
|
40
37
|
bs.offset += 2;
|
|
41
38
|
serializeArbitrary(unchecked(values[srcEnd]));
|
|
42
39
|
|
|
43
|
-
bs.growSize(2);
|
|
44
40
|
store<u16>(bs.offset, BRACE_RIGHT);
|
|
45
41
|
bs.offset += 2;
|
|
46
42
|
}
|
|
@@ -1 +1,66 @@
|
|
|
1
|
+
import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
|
|
2
|
+
import { JSON } from "../..";
|
|
1
3
|
export { serializeArrayBufferUnsafe, serializeTypedArray } from "../simple/typedarray";
|
|
4
|
+
import { serializeArrayBufferUnsafe, serializeTypedArray } from "../simple/typedarray";
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@inline export function serializeDynamic(type: u16, data: usize): void {
|
|
8
|
+
if (type == JSON.Types.ArrayBuffer) {
|
|
9
|
+
serializeArrayBufferUnsafe(data, changetype<OBJECT>(data - TOTAL_OVERHEAD).rtSize);
|
|
10
|
+
} else if (type == JSON.Types.TypedArray) {
|
|
11
|
+
const id = changetype<OBJECT>(data - TOTAL_OVERHEAD).rtId;
|
|
12
|
+
if (id == idof<Int8Array>()) {
|
|
13
|
+
serializeTypedArray<Int8Array>(changetype<Int8Array>(data));
|
|
14
|
+
} else if (id == idof<Uint8Array>()) {
|
|
15
|
+
serializeTypedArray<Uint8Array>(changetype<Uint8Array>(data));
|
|
16
|
+
} else if (id == idof<Uint8ClampedArray>()) {
|
|
17
|
+
serializeTypedArray<Uint8ClampedArray>(changetype<Uint8ClampedArray>(data));
|
|
18
|
+
} else if (id == idof<Int16Array>()) {
|
|
19
|
+
serializeTypedArray<Int16Array>(changetype<Int16Array>(data));
|
|
20
|
+
} else if (id == idof<Uint16Array>()) {
|
|
21
|
+
serializeTypedArray<Uint16Array>(changetype<Uint16Array>(data));
|
|
22
|
+
} else if (id == idof<Int32Array>()) {
|
|
23
|
+
serializeTypedArray<Int32Array>(changetype<Int32Array>(data));
|
|
24
|
+
} else if (id == idof<Uint32Array>()) {
|
|
25
|
+
serializeTypedArray<Uint32Array>(changetype<Uint32Array>(data));
|
|
26
|
+
} else if (id == idof<Int64Array>()) {
|
|
27
|
+
serializeTypedArray<Int64Array>(changetype<Int64Array>(data));
|
|
28
|
+
} else if (id == idof<Uint64Array>()) {
|
|
29
|
+
serializeTypedArray<Uint64Array>(changetype<Uint64Array>(data));
|
|
30
|
+
} else if (id == idof<Float32Array>()) {
|
|
31
|
+
serializeTypedArray<Float32Array>(changetype<Float32Array>(data));
|
|
32
|
+
} else if (id == idof<Float64Array>()) {
|
|
33
|
+
serializeTypedArray<Float64Array>(changetype<Float64Array>(data));
|
|
34
|
+
} else if (changetype<Int8Array>(data) instanceof Int8Array) {
|
|
35
|
+
serializeTypedArray<Int8Array>(changetype<Int8Array>(data));
|
|
36
|
+
} else if (changetype<Uint8Array>(data) instanceof Uint8Array) {
|
|
37
|
+
serializeTypedArray<Uint8Array>(changetype<Uint8Array>(data));
|
|
38
|
+
} else if (changetype<Uint8ClampedArray>(data) instanceof Uint8ClampedArray) {
|
|
39
|
+
serializeTypedArray<Uint8ClampedArray>(changetype<Uint8ClampedArray>(data));
|
|
40
|
+
} else if (changetype<Int16Array>(data) instanceof Int16Array) {
|
|
41
|
+
serializeTypedArray<Int16Array>(changetype<Int16Array>(data));
|
|
42
|
+
} else if (changetype<Uint16Array>(data) instanceof Uint16Array) {
|
|
43
|
+
serializeTypedArray<Uint16Array>(changetype<Uint16Array>(data));
|
|
44
|
+
} else if (changetype<Int32Array>(data) instanceof Int32Array) {
|
|
45
|
+
serializeTypedArray<Int32Array>(changetype<Int32Array>(data));
|
|
46
|
+
} else if (changetype<Uint32Array>(data) instanceof Uint32Array) {
|
|
47
|
+
serializeTypedArray<Uint32Array>(changetype<Uint32Array>(data));
|
|
48
|
+
} else if (changetype<Int64Array>(data) instanceof Int64Array) {
|
|
49
|
+
serializeTypedArray<Int64Array>(changetype<Int64Array>(data));
|
|
50
|
+
} else if (changetype<Uint64Array>(data) instanceof Uint64Array) {
|
|
51
|
+
serializeTypedArray<Uint64Array>(changetype<Uint64Array>(data));
|
|
52
|
+
} else if (changetype<Float32Array>(data) instanceof Float32Array) {
|
|
53
|
+
serializeTypedArray<Float32Array>(changetype<Float32Array>(data));
|
|
54
|
+
} else if (changetype<Float64Array>(data) instanceof Float64Array) {
|
|
55
|
+
serializeTypedArray<Float64Array>(changetype<Float64Array>(data));
|
|
56
|
+
} else {
|
|
57
|
+
throw new Error("Unsupported typed array in JSON.Value");
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
@inline export function serializeArrayBuffer(data: ArrayBuffer): void {
|
|
64
|
+
const dataStart = changetype<usize>(data);
|
|
65
|
+
serializeArrayBufferUnsafe(dataStart, changetype<OBJECT>(dataStart - TOTAL_OVERHEAD).rtSize);
|
|
66
|
+
}
|
|
@@ -2,6 +2,7 @@ import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
|
|
|
2
2
|
import { bs, sc } from "../../../lib/as-bs";
|
|
3
3
|
import { BACK_SLASH } from "../../custom/chars";
|
|
4
4
|
import { SERIALIZE_ESCAPE_TABLE } from "../../globals/tables";
|
|
5
|
+
import { u16_to_hex4_swar } from "../../util/swar";
|
|
5
6
|
// @ts-expect-error: @lazy is a valid decorator
|
|
6
7
|
@lazy const U00_MARKER = 13511005048209500;
|
|
7
8
|
// @ts-expect-error: @lazy is a valid decorator
|
|
@@ -54,16 +55,15 @@ export function serializeString_SIMD(src: string): void {
|
|
|
54
55
|
// console.log("lt20 : " + mask_to_string_v128(lt20) + " -> " + mask_to_string_v128(SPLAT_0020));
|
|
55
56
|
// console.log("gteD8 : " + mask_to_string_v128(gteD8) + " -> " + mask_to_string_v128(SPLAT_FFD8));
|
|
56
57
|
|
|
57
|
-
|
|
58
|
-
// console.log("sieve : " + mask_to_string_v128(sieve));
|
|
58
|
+
let mask = i8x16.bitmask(v128.or(eq22, v128.or(eq5C, v128.or(lt20, gteD8))));
|
|
59
59
|
|
|
60
|
-
if (
|
|
60
|
+
if (mask == 0) {
|
|
61
61
|
bs.offset += 16;
|
|
62
62
|
srcStart += 16;
|
|
63
63
|
continue;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
bs.growSize(popcnt(mask) * 10 + 12);
|
|
67
67
|
|
|
68
68
|
do {
|
|
69
69
|
const laneIdx = ctz(mask);
|
|
@@ -109,7 +109,7 @@ export function serializeString_SIMD(src: string): void {
|
|
|
109
109
|
const next = load<u16>(srcIdx, 1);
|
|
110
110
|
if (next >= 0xdc00 && next <= 0xdfff) {
|
|
111
111
|
// paired surrogate
|
|
112
|
-
mask &=
|
|
112
|
+
mask &= ~(0b11 << (laneIdx + 1));
|
|
113
113
|
continue;
|
|
114
114
|
}
|
|
115
115
|
}
|
|
@@ -118,7 +118,7 @@ export function serializeString_SIMD(src: string): void {
|
|
|
118
118
|
// unpaired high/low surrogate
|
|
119
119
|
const dstIdx = bs.offset + laneIdx - 1;
|
|
120
120
|
store<u32>(dstIdx, U_MARKER); // \u
|
|
121
|
-
store<u64>(dstIdx,
|
|
121
|
+
store<u64>(dstIdx, u16_to_hex4_swar(code), 4);
|
|
122
122
|
// memory.copy(dstIdx + 12, srcIdx + 1, 15 - laneIdx);
|
|
123
123
|
store<v128>(dstIdx, load<v128>(srcIdx, 1), 12);
|
|
124
124
|
bs.offset += 10;
|
|
@@ -181,15 +181,6 @@ export function serializeString_SIMD(src: string): void {
|
|
|
181
181
|
@inline function write_u_escape(code: u16): void {
|
|
182
182
|
bs.growSize(10);
|
|
183
183
|
store<u32>(bs.offset, U_MARKER); // "\u"
|
|
184
|
-
|
|
185
|
-
store<u16>(bs.offset + 4, hexNibble((code >> 12) & 0xf));
|
|
186
|
-
store<u16>(bs.offset + 6, hexNibble((code >> 8) & 0xf));
|
|
187
|
-
store<u16>(bs.offset + 8, hexNibble((code >> 4) & 0xf));
|
|
188
|
-
store<u16>(bs.offset + 10, hexNibble(code & 0xf));
|
|
184
|
+
store<u64>(bs.offset, u16_to_hex4_swar(code), 4);
|
|
189
185
|
bs.offset += 12;
|
|
190
186
|
}
|
|
191
|
-
|
|
192
|
-
// @ts-expect-error: @inline is a valid decorator
|
|
193
|
-
@inline function hexNibble(n: u16): u16 {
|
|
194
|
-
return n < 10 ? 48 + n : 87 + n;
|
|
195
|
-
}
|
|
@@ -2,11 +2,12 @@ import { JSON } from "../..";
|
|
|
2
2
|
import { bs } from "../../../lib/as-bs";
|
|
3
3
|
import { serializeArray } from "./array";
|
|
4
4
|
import { serializeBool } from "./bool";
|
|
5
|
-
import {
|
|
5
|
+
import { serializeFloat32, serializeFloat64 } from "./float";
|
|
6
6
|
import { serializeInteger } from "./integer";
|
|
7
7
|
import { serializeMap } from "./map";
|
|
8
8
|
import { serializeObject } from "./object";
|
|
9
9
|
import { serializeString } from "./string";
|
|
10
|
+
import { serializeDynamic } from "../index/typedarray";
|
|
10
11
|
|
|
11
12
|
export function serializeArbitrary(src: JSON.Value): void {
|
|
12
13
|
switch (src.type) {
|
|
@@ -40,10 +41,10 @@ export function serializeArbitrary(src: JSON.Value): void {
|
|
|
40
41
|
serializeInteger<i64>(src.get<i64>());
|
|
41
42
|
break;
|
|
42
43
|
case JSON.Types.F32:
|
|
43
|
-
|
|
44
|
+
serializeFloat32(src.get<f32>());
|
|
44
45
|
break;
|
|
45
46
|
case JSON.Types.F64:
|
|
46
|
-
|
|
47
|
+
serializeFloat64(src.get<f64>());
|
|
47
48
|
break;
|
|
48
49
|
case JSON.Types.String:
|
|
49
50
|
serializeString(src.get<string>());
|
|
@@ -63,6 +64,11 @@ export function serializeArbitrary(src: JSON.Value): void {
|
|
|
63
64
|
serializeMap(src.get<Map<string, JSON.Value>>());
|
|
64
65
|
break;
|
|
65
66
|
}
|
|
67
|
+
case JSON.Types.TypedArray:
|
|
68
|
+
case JSON.Types.ArrayBuffer: {
|
|
69
|
+
serializeDynamic(src.type, src.get<usize>());
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
66
72
|
default: {
|
|
67
73
|
const fn = JSON.Value.METHODS.get(src.type - JSON.Types.Struct);
|
|
68
74
|
const ptr = src.get<usize>();
|
|
@@ -1,16 +1,29 @@
|
|
|
1
1
|
import { bs } from "../../../lib/as-bs";
|
|
2
2
|
import { COMMA, BRACKET_RIGHT, BRACKET_LEFT } from "../../custom/chars";
|
|
3
3
|
import { JSON } from "../..";
|
|
4
|
+
import { serializeFloat32, serializeFloat64 } from "./float";
|
|
5
|
+
|
|
6
|
+
@inline
|
|
7
|
+
function serializeArrayElement<T>(value: T): void {
|
|
8
|
+
if (isFloat<T>()) {
|
|
9
|
+
if (sizeof<T>() == 4) serializeFloat32(<f32>value);
|
|
10
|
+
else serializeFloat64(<f64>value);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
JSON.__serialize<T>(value);
|
|
14
|
+
}
|
|
4
15
|
|
|
5
16
|
export function serializeArray<T extends any[]>(src: T): void {
|
|
6
|
-
|
|
7
|
-
const end =
|
|
17
|
+
const len = src.length;
|
|
18
|
+
const end = len - 1;
|
|
8
19
|
let i = 0;
|
|
9
20
|
if (end == -1) {
|
|
21
|
+
bs.proposeSize(4);
|
|
10
22
|
store<u32>(bs.offset, 6094939);
|
|
11
23
|
bs.offset += 4;
|
|
12
24
|
return;
|
|
13
25
|
}
|
|
26
|
+
bs.proposeSize(4 + <u32>(len - 1) * 2);
|
|
14
27
|
// {} = 4
|
|
15
28
|
// xi, = n << 1
|
|
16
29
|
|
|
@@ -19,15 +32,13 @@ export function serializeArray<T extends any[]>(src: T): void {
|
|
|
19
32
|
|
|
20
33
|
while (i < end) {
|
|
21
34
|
const block = unchecked(src[i++]);
|
|
22
|
-
|
|
23
|
-
bs.growSize(2);
|
|
35
|
+
serializeArrayElement<valueof<T>>(block);
|
|
24
36
|
store<u16>(bs.offset, COMMA);
|
|
25
37
|
bs.offset += 2;
|
|
26
38
|
}
|
|
27
39
|
|
|
28
40
|
const lastBlock = unchecked(src[end]);
|
|
29
|
-
|
|
30
|
-
// bs.growSize(2);
|
|
41
|
+
serializeArrayElement<valueof<T>>(lastBlock);
|
|
31
42
|
store<u16>(bs.offset, BRACKET_RIGHT);
|
|
32
43
|
bs.offset += 2;
|
|
33
44
|
}
|
|
@@ -1,10 +1,24 @@
|
|
|
1
1
|
import { bs } from "../../../lib/as-bs";
|
|
2
|
-
import {
|
|
2
|
+
import { dragonbox_f32_buffered, dragonbox_f64_buffered } from "../../util/dragonbox";
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
@inline
|
|
5
|
+
export function serializeFloat32(data: f32): void {
|
|
6
6
|
bs.ensureSize(64);
|
|
7
|
-
const size =
|
|
7
|
+
const size = dragonbox_f32_buffered(bs.offset, data) << 1;
|
|
8
8
|
bs.stackSize += size;
|
|
9
9
|
bs.offset += size;
|
|
10
10
|
}
|
|
11
|
+
|
|
12
|
+
@inline
|
|
13
|
+
export function serializeFloat64(data: f64): void {
|
|
14
|
+
bs.ensureSize(64);
|
|
15
|
+
const size = dragonbox_f64_buffered(bs.offset, data) << 1;
|
|
16
|
+
bs.stackSize += size;
|
|
17
|
+
bs.offset += size;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// @ts-ignore: inline
|
|
21
|
+
@inline export function serializeFloat<T extends number>(data: T): void {
|
|
22
|
+
if (sizeof<T>() == 4) serializeFloat32(<f32>data);
|
|
23
|
+
else serializeFloat64(<f64>data);
|
|
24
|
+
}
|
|
@@ -15,52 +15,35 @@ export function serializeMap<T extends Map<any, any>>(src: T): void {
|
|
|
15
15
|
|
|
16
16
|
let keys = src.keys();
|
|
17
17
|
let values = src.values();
|
|
18
|
+
const keyIsString = isString<indexof<T>>();
|
|
18
19
|
|
|
19
|
-
bs.proposeSize(4);
|
|
20
|
+
bs.proposeSize(4 + <u32>(srcSize - 1) * 2 + <u32>srcSize * 2);
|
|
20
21
|
|
|
21
22
|
store<u16>(bs.offset, BRACE_LEFT);
|
|
22
23
|
bs.offset += 2;
|
|
23
24
|
|
|
24
25
|
for (let i = 0; i < srcEnd; i++) {
|
|
25
|
-
|
|
26
|
-
if (!isString<indexof<T>>()) {
|
|
27
|
-
bs.growSize(6);
|
|
28
|
-
store<u16>(bs.offset, 34);
|
|
29
|
-
bs.offset += 2;
|
|
26
|
+
if (keyIsString) {
|
|
30
27
|
JSON.__serialize(unchecked(keys[i]));
|
|
31
|
-
store<u16>(bs.offset, 34);
|
|
32
|
-
store<u16>(bs.offset, COLON, 2);
|
|
33
|
-
bs.offset += 4;
|
|
34
28
|
} else {
|
|
35
|
-
JSON.__serialize(unchecked(keys[i]));
|
|
36
|
-
bs.growSize(2);
|
|
37
|
-
store<u16>(bs.offset, COLON);
|
|
38
|
-
bs.offset += 2;
|
|
29
|
+
JSON.__serialize<string>(JSON.internal.stringify<indexof<T>>(unchecked(keys[i])));
|
|
39
30
|
}
|
|
31
|
+
store<u16>(bs.offset, COLON);
|
|
32
|
+
bs.offset += 2;
|
|
40
33
|
JSON.__serialize(unchecked(values[i]));
|
|
41
|
-
bs.growSize(2);
|
|
42
34
|
store<u16>(bs.offset, COMMA);
|
|
43
35
|
bs.offset += 2;
|
|
44
36
|
}
|
|
45
37
|
|
|
46
|
-
|
|
47
|
-
if (!isString<indexof<T>>()) {
|
|
48
|
-
bs.growSize(6);
|
|
49
|
-
store<u16>(bs.offset, 34);
|
|
50
|
-
bs.offset += 2;
|
|
38
|
+
if (keyIsString) {
|
|
51
39
|
JSON.__serialize(unchecked(keys[srcEnd]));
|
|
52
|
-
store<u16>(bs.offset, 34);
|
|
53
|
-
store<u16>(bs.offset, COLON, 2);
|
|
54
|
-
bs.offset += 4;
|
|
55
40
|
} else {
|
|
56
|
-
JSON.__serialize(unchecked(keys[srcEnd]));
|
|
57
|
-
bs.growSize(2);
|
|
58
|
-
store<u16>(bs.offset, COLON);
|
|
59
|
-
bs.offset += 2;
|
|
41
|
+
JSON.__serialize<string>(JSON.internal.stringify<indexof<T>>(unchecked(keys[srcEnd])));
|
|
60
42
|
}
|
|
43
|
+
store<u16>(bs.offset, COLON);
|
|
44
|
+
bs.offset += 2;
|
|
61
45
|
|
|
62
46
|
JSON.__serialize(unchecked(values[srcEnd]));
|
|
63
|
-
// bs.growSize(2);
|
|
64
47
|
store<u16>(bs.offset, BRACE_RIGHT);
|
|
65
48
|
bs.offset += 2;
|
|
66
49
|
}
|
|
@@ -18,29 +18,25 @@ export function serializeObject(src: JSON.Obj): void {
|
|
|
18
18
|
const keys = src.keys();
|
|
19
19
|
const values = src.values();
|
|
20
20
|
|
|
21
|
-
bs.
|
|
21
|
+
bs.proposeSize(4 + <u32>(srcSize - 1) * 2 + <u32>srcSize * 2);
|
|
22
22
|
store<u16>(bs.offset, BRACE_LEFT);
|
|
23
23
|
bs.offset += 2;
|
|
24
24
|
|
|
25
25
|
for (let i = 0; i < srcEnd; i++) {
|
|
26
26
|
serializeString_SWAR(unchecked(keys[i]));
|
|
27
|
-
bs.growSize(2);
|
|
28
27
|
store<u16>(bs.offset, COLON);
|
|
29
28
|
bs.offset += 2;
|
|
30
29
|
|
|
31
30
|
serializeArbitrary(unchecked(values[i]));
|
|
32
|
-
bs.growSize(2);
|
|
33
31
|
store<u16>(bs.offset, COMMA);
|
|
34
32
|
bs.offset += 2;
|
|
35
33
|
}
|
|
36
34
|
|
|
37
35
|
serializeString_SWAR(unchecked(keys[srcEnd]));
|
|
38
|
-
bs.growSize(2);
|
|
39
36
|
store<u16>(bs.offset, COLON);
|
|
40
37
|
bs.offset += 2;
|
|
41
38
|
serializeArbitrary(unchecked(values[srcEnd]));
|
|
42
39
|
|
|
43
|
-
bs.growSize(2);
|
|
44
40
|
store<u16>(bs.offset, BRACE_RIGHT);
|
|
45
41
|
bs.offset += 2;
|
|
46
42
|
}
|
|
@@ -3,25 +3,24 @@ import { COMMA, BRACKET_RIGHT, BRACKET_LEFT } from "../../custom/chars";
|
|
|
3
3
|
import { JSON } from "../..";
|
|
4
4
|
|
|
5
5
|
export function serializeSet<T extends Set<any>>(src: T): void {
|
|
6
|
-
bs.proposeSize(4);
|
|
7
6
|
const srcSize = src.size;
|
|
8
7
|
if (srcSize == 0) {
|
|
8
|
+
bs.proposeSize(4);
|
|
9
9
|
store<u32>(bs.offset, 6094939); // []
|
|
10
10
|
bs.offset += 4;
|
|
11
11
|
return;
|
|
12
12
|
}
|
|
13
|
+
bs.proposeSize(4 + <u32>(srcSize - 1) * 2);
|
|
13
14
|
|
|
14
15
|
const values = src.values();
|
|
15
|
-
const end = srcSize - 1;
|
|
16
|
-
|
|
17
16
|
store<u16>(bs.offset, BRACKET_LEFT);
|
|
18
17
|
bs.offset += 2;
|
|
19
18
|
|
|
19
|
+
const end = srcSize - 1;
|
|
20
20
|
for (let i = 0; i < end; i++) {
|
|
21
21
|
const block = unchecked(values[i]);
|
|
22
22
|
// @ts-ignore: type
|
|
23
23
|
JSON.__serialize<indexof<T>>(block);
|
|
24
|
-
bs.growSize(2);
|
|
25
24
|
store<u16>(bs.offset, COMMA);
|
|
26
25
|
bs.offset += 2;
|
|
27
26
|
}
|
|
@@ -3,14 +3,16 @@ import { COMMA, BRACKET_RIGHT, BRACKET_LEFT } from "../../custom/chars";
|
|
|
3
3
|
import { JSON } from "../..";
|
|
4
4
|
|
|
5
5
|
export function serializeStaticArray<T extends StaticArray<any>>(src: T): void {
|
|
6
|
-
|
|
7
|
-
const end =
|
|
6
|
+
const len = src.length;
|
|
7
|
+
const end = len - 1;
|
|
8
8
|
let i = 0;
|
|
9
9
|
if (end == -1) {
|
|
10
|
+
bs.proposeSize(4);
|
|
10
11
|
store<u32>(bs.offset, 6094939); // []
|
|
11
12
|
bs.offset += 4;
|
|
12
13
|
return;
|
|
13
14
|
}
|
|
15
|
+
bs.proposeSize(4 + <u32>(len - 1) * 2);
|
|
14
16
|
|
|
15
17
|
store<u16>(bs.offset, BRACKET_LEFT);
|
|
16
18
|
bs.offset += 2;
|
|
@@ -18,7 +20,6 @@ export function serializeStaticArray<T extends StaticArray<any>>(src: T): void {
|
|
|
18
20
|
while (i < end) {
|
|
19
21
|
const block = unchecked(src[i++]);
|
|
20
22
|
JSON.__serialize<valueof<T>>(block);
|
|
21
|
-
bs.growSize(2);
|
|
22
23
|
store<u16>(bs.offset, COMMA);
|
|
23
24
|
bs.offset += 2;
|
|
24
25
|
}
|
|
@@ -3,6 +3,7 @@ import { _intTo16 } from "../../custom/util";
|
|
|
3
3
|
import { bytes } from "../../util/bytes";
|
|
4
4
|
import { BACK_SLASH, QUOTE } from "../../custom/chars";
|
|
5
5
|
import { SERIALIZE_ESCAPE_TABLE } from "../../globals/tables";
|
|
6
|
+
import { u16_to_hex4_swar } from "../../util/swar";
|
|
6
7
|
import { serializeStruct } from "./struct";
|
|
7
8
|
|
|
8
9
|
// @ts-ignore: decorator allowed
|
|
@@ -68,7 +69,7 @@ import { serializeStruct } from "./struct";
|
|
|
68
69
|
// unpaired high/low surrogate
|
|
69
70
|
bs.growSize(10);
|
|
70
71
|
store<u32>(bs.offset, U_MARKER); // \u
|
|
71
|
-
store<u64>(bs.offset,
|
|
72
|
+
store<u64>(bs.offset, u16_to_hex4_swar(code), 4);
|
|
72
73
|
bs.offset += 12;
|
|
73
74
|
lastPtr = srcPtr;
|
|
74
75
|
continue;
|
|
@@ -84,15 +85,6 @@ import { serializeStruct } from "./struct";
|
|
|
84
85
|
@inline function write_u_escape(code: u16): void {
|
|
85
86
|
bs.growSize(10);
|
|
86
87
|
store<u32>(bs.offset, U_MARKER); // "\u"
|
|
87
|
-
|
|
88
|
-
store<u16>(bs.offset + 4, hexNibble((code >> 12) & 0xf));
|
|
89
|
-
store<u16>(bs.offset + 6, hexNibble((code >> 8) & 0xf));
|
|
90
|
-
store<u16>(bs.offset + 8, hexNibble((code >> 4) & 0xf));
|
|
91
|
-
store<u16>(bs.offset + 10, hexNibble(code & 0xf));
|
|
88
|
+
store<u64>(bs.offset, u16_to_hex4_swar(code), 4);
|
|
92
89
|
bs.offset += 12;
|
|
93
90
|
}
|
|
94
|
-
|
|
95
|
-
// @ts-ignore: inline
|
|
96
|
-
@inline function hexNibble(n: u16): u16 {
|
|
97
|
-
return n < 10 ? 48 + n : 87 + n;
|
|
98
|
-
}
|
|
@@ -1,33 +1,35 @@
|
|
|
1
1
|
import { bs } from "../../../lib/as-bs";
|
|
2
2
|
import { BRACKET_LEFT, BRACKET_RIGHT, COMMA } from "../../custom/chars";
|
|
3
|
-
import {
|
|
3
|
+
import { serializeFloat32, serializeFloat64 } from "./float";
|
|
4
4
|
import { serializeInteger } from "./integer";
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
@inline
|
|
8
8
|
function serializeTypedArrayElement<T extends ArrayLike<number>>(src: T, index: i32): void {
|
|
9
9
|
if (isFloat<valueof<T>>()) {
|
|
10
|
-
|
|
10
|
+
if (sizeof<valueof<T>>() == 4) serializeFloat32(<f32>unchecked(src[index]));
|
|
11
|
+
else serializeFloat64(<f64>unchecked(src[index]));
|
|
11
12
|
} else {
|
|
12
13
|
serializeInteger<valueof<T>>(unchecked(src[index]));
|
|
13
14
|
}
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
export function serializeTypedArray<T extends ArrayLike<number>>(src: T): void {
|
|
17
|
-
|
|
18
|
-
const end =
|
|
18
|
+
const len = src.length;
|
|
19
|
+
const end = len - 1;
|
|
19
20
|
if (end == -1) {
|
|
21
|
+
bs.proposeSize(4);
|
|
20
22
|
store<u32>(bs.offset, 6094939);
|
|
21
23
|
bs.offset += 4;
|
|
22
24
|
return;
|
|
23
25
|
}
|
|
26
|
+
bs.proposeSize(4 + <u32>(len - 1) * 2);
|
|
24
27
|
|
|
25
28
|
store<u16>(bs.offset, BRACKET_LEFT);
|
|
26
29
|
bs.offset += 2;
|
|
27
30
|
|
|
28
31
|
for (let i = 0; i < end; i++) {
|
|
29
32
|
serializeTypedArrayElement(src, i);
|
|
30
|
-
bs.growSize(2);
|
|
31
33
|
store<u16>(bs.offset, COMMA);
|
|
32
34
|
bs.offset += 2;
|
|
33
35
|
}
|
|
@@ -40,19 +42,19 @@ export function serializeTypedArray<T extends ArrayLike<number>>(src: T): void {
|
|
|
40
42
|
export function serializeArrayBufferUnsafe(srcStart: usize, byteLength: i32): void {
|
|
41
43
|
const end = byteLength - 1;
|
|
42
44
|
|
|
43
|
-
bs.proposeSize(4);
|
|
44
45
|
if (end == -1) {
|
|
46
|
+
bs.proposeSize(4);
|
|
45
47
|
store<u32>(bs.offset, 6094939);
|
|
46
48
|
bs.offset += 4;
|
|
47
49
|
return;
|
|
48
50
|
}
|
|
51
|
+
bs.proposeSize(4 + <u32>(end) * 2);
|
|
49
52
|
|
|
50
53
|
store<u16>(bs.offset, BRACKET_LEFT);
|
|
51
54
|
bs.offset += 2;
|
|
52
55
|
|
|
53
56
|
for (let i = 0; i < end; i++) {
|
|
54
57
|
serializeInteger<u8>(load<u8>(srcStart + <usize>i));
|
|
55
|
-
bs.growSize(2);
|
|
56
58
|
store<u16>(bs.offset, COMMA);
|
|
57
59
|
bs.offset += 2;
|
|
58
60
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { bs, sc } from "../../../lib/as-bs";
|
|
2
2
|
import { BACK_SLASH } from "../../custom/chars";
|
|
3
3
|
import { SERIALIZE_ESCAPE_TABLE } from "../../globals/tables";
|
|
4
|
+
import { u16_to_hex4_swar } from "../../util/swar";
|
|
4
5
|
import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
|
|
5
6
|
|
|
6
7
|
// @ts-expect-error: @lazy is a valid decorator
|
|
7
|
-
// @ts-nocheck
|
|
8
8
|
@lazy const U00_MARKER = 13511005048209500;
|
|
9
9
|
// @ts-expect-error: @lazy is a valid decorator
|
|
10
10
|
@lazy const U_MARKER = 7667804;
|
|
@@ -89,7 +89,7 @@ export function serializeString_SWAR(src: string): void {
|
|
|
89
89
|
// unpaired high/low surrogate
|
|
90
90
|
const dstIdx = bs.offset + laneIdx - 1;
|
|
91
91
|
store<u32>(dstIdx, U_MARKER); // \u
|
|
92
|
-
store<u64>(dstIdx,
|
|
92
|
+
store<u64>(dstIdx, u16_to_hex4_swar(code), 4);
|
|
93
93
|
store<u64>(dstIdx, load<u64>(srcIdx, 1), 12);
|
|
94
94
|
bs.offset += 10;
|
|
95
95
|
} while (mask !== 0);
|
|
@@ -152,19 +152,10 @@ export function serializeString_SWAR(src: string): void {
|
|
|
152
152
|
@inline function write_u_escape(code: u16): void {
|
|
153
153
|
bs.growSize(10);
|
|
154
154
|
store<u32>(bs.offset, U_MARKER); // "\u"
|
|
155
|
-
|
|
156
|
-
store<u16>(bs.offset + 4, hexNibble((code >> 12) & 0xf));
|
|
157
|
-
store<u16>(bs.offset + 6, hexNibble((code >> 8) & 0xf));
|
|
158
|
-
store<u16>(bs.offset + 8, hexNibble((code >> 4) & 0xf));
|
|
159
|
-
store<u16>(bs.offset + 10, hexNibble(code & 0xf));
|
|
155
|
+
store<u64>(bs.offset, u16_to_hex4_swar(code), 4);
|
|
160
156
|
bs.offset += 12;
|
|
161
157
|
}
|
|
162
158
|
|
|
163
|
-
// @ts-expect-error: @inline is a valid decorator
|
|
164
|
-
@inline function hexNibble(n: u16): u16 {
|
|
165
|
-
return n < 10 ? 48 + n : 87 + n;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
159
|
// @ts-expect-error: @inline is a valid decorator
|
|
169
160
|
@inline export function detect_escapable_u64_swar_safe(block: u64): u64 {
|
|
170
161
|
const lo = block & 0x00ff_00ff_00ff_00ff;
|
package/assembly/tsconfig.json
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
"extends": "assemblyscript/std/assembly.json",
|
|
3
3
|
"include": ["./**/*.ts"],
|
|
4
4
|
"compilerOptions": {
|
|
5
|
+
"allowImportingTsExtensions": true,
|
|
5
6
|
"experimentalDecorators": true,
|
|
6
7
|
"emitDecoratorMetadata": true,
|
|
7
8
|
|
|
@@ -18,6 +19,6 @@
|
|
|
18
19
|
"noUnusedParameters": false,
|
|
19
20
|
"noImplicitReturns": true,
|
|
20
21
|
"noFallthroughCasesInSwitch": true,
|
|
21
|
-
"noUncheckedIndexedAccess": false
|
|
22
|
-
}
|
|
22
|
+
"noUncheckedIndexedAccess": false,
|
|
23
|
+
},
|
|
23
24
|
}
|