json-as 1.2.5 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.as-test/coverage/naive/coverage.arbitrary.spec.ts.log.json +5628 -0
- package/.as-test/coverage/naive/coverage.array.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.bool.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.box.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.custom.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.date.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.enum.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.float.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.generics.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.hierarchy.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.integer.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.map.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.namespace.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.null.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.raw.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.resolving.spec.ts.log.json +5628 -0
- package/.as-test/coverage/naive/coverage.set.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.staticarray.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.string.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.struct.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.types.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.arbitrary.spec.ts.log.json +5628 -0
- package/.as-test/coverage/simd/coverage.array.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.bool.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.box.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.custom.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.date.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.enum.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.float.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.generics.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.hierarchy.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.integer.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.map.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.namespace.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.null.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.raw.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.resolving.spec.ts.log.json +5628 -0
- package/.as-test/coverage/simd/coverage.set.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.staticarray.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.string.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.struct.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.types.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.arbitrary.spec.ts.log.json +5628 -0
- package/.as-test/coverage/swar/coverage.array.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.bool.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.box.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.custom.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.date.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.enum.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.float.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.generics.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.hierarchy.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.integer.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.map.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.namespace.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.null.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.raw.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.resolving.spec.ts.log.json +5628 -0
- package/.as-test/coverage/swar/coverage.set.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.staticarray.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.string.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.struct.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.types.spec.ts.log.json +5187 -0
- package/.as-test/logs/naive/run.arbitrary.spec.ts.log.json +943 -0
- package/.as-test/logs/naive/run.array.spec.ts.log.json +1053 -0
- package/.as-test/logs/naive/run.bool.spec.ts.log.json +257 -0
- package/.as-test/logs/naive/run.box.spec.ts.log.json +353 -0
- package/.as-test/logs/naive/run.custom.spec.ts.log.json +309 -0
- package/.as-test/logs/naive/run.date.spec.ts.log.json +397 -0
- package/.as-test/logs/naive/run.enum.spec.ts.log.json +343 -0
- package/.as-test/logs/naive/run.float.spec.ts.log.json +453 -0
- package/.as-test/logs/naive/run.generics.spec.ts.log.json +393 -0
- package/.as-test/logs/naive/run.hierarchy.spec.ts.log.json +325 -0
- package/.as-test/logs/naive/run.integer.spec.ts.log.json +373 -0
- package/.as-test/logs/naive/run.map.spec.ts.log.json +247 -0
- package/.as-test/logs/naive/run.namespace.spec.ts.log.json +361 -0
- package/.as-test/logs/naive/run.null.spec.ts.log.json +273 -0
- package/.as-test/logs/naive/run.raw.spec.ts.log.json +309 -0
- package/.as-test/logs/naive/run.resolving.spec.ts.log.json +273 -0
- package/.as-test/logs/naive/run.set.spec.ts.log.json +733 -0
- package/.as-test/logs/naive/run.staticarray.spec.ts.log.json +931 -0
- package/.as-test/logs/naive/run.string.spec.ts.log.json +2289 -0
- package/.as-test/logs/naive/run.struct.spec.ts.log.json +523 -0
- package/.as-test/logs/naive/run.types.spec.ts.log.json +273 -0
- package/.as-test/logs/naive/test.arbitrary.spec.ts.log.json +943 -0
- package/.as-test/logs/naive/test.array.spec.ts.log.json +1053 -0
- package/.as-test/logs/naive/test.bool.spec.ts.log.json +257 -0
- package/.as-test/logs/naive/test.box.spec.ts.log.json +353 -0
- package/.as-test/logs/naive/test.custom.spec.ts.log.json +309 -0
- package/.as-test/logs/naive/test.date.spec.ts.log.json +397 -0
- package/.as-test/logs/naive/test.enum.spec.ts.log.json +343 -0
- package/.as-test/logs/naive/test.float.spec.ts.log.json +453 -0
- package/.as-test/logs/naive/test.generics.spec.ts.log.json +393 -0
- package/.as-test/logs/naive/test.hierarchy.spec.ts.log.json +325 -0
- package/.as-test/logs/naive/test.integer.spec.ts.log.json +373 -0
- package/.as-test/logs/naive/test.log.json +2289 -0
- package/.as-test/logs/naive/test.map.spec.ts.log.json +247 -0
- package/.as-test/logs/naive/test.namespace.spec.ts.log.json +361 -0
- package/.as-test/logs/naive/test.null.spec.ts.log.json +273 -0
- package/.as-test/logs/naive/test.raw.spec.ts.log.json +309 -0
- package/.as-test/logs/naive/test.resolving.spec.ts.log.json +273 -0
- package/.as-test/logs/naive/test.set.spec.ts.log.json +733 -0
- package/.as-test/logs/naive/test.staticarray.spec.ts.log.json +931 -0
- package/.as-test/logs/naive/test.string.spec.ts.log.json +2345 -0
- package/.as-test/logs/naive/test.struct.spec.ts.log.json +523 -0
- package/.as-test/logs/naive/test.types.spec.ts.log.json +273 -0
- package/.as-test/logs/simd/run.arbitrary.spec.ts.log.json +943 -0
- package/.as-test/logs/simd/run.array.spec.ts.log.json +1053 -0
- package/.as-test/logs/simd/run.bool.spec.ts.log.json +257 -0
- package/.as-test/logs/simd/run.box.spec.ts.log.json +353 -0
- package/.as-test/logs/simd/run.custom.spec.ts.log.json +309 -0
- package/.as-test/logs/simd/run.date.spec.ts.log.json +397 -0
- package/.as-test/logs/simd/run.enum.spec.ts.log.json +343 -0
- package/.as-test/logs/simd/run.float.spec.ts.log.json +453 -0
- package/.as-test/logs/simd/run.generics.spec.ts.log.json +393 -0
- package/.as-test/logs/simd/run.hierarchy.spec.ts.log.json +325 -0
- package/.as-test/logs/simd/run.integer.spec.ts.log.json +373 -0
- package/.as-test/logs/simd/run.map.spec.ts.log.json +247 -0
- package/.as-test/logs/simd/run.namespace.spec.ts.log.json +361 -0
- package/.as-test/logs/simd/run.null.spec.ts.log.json +273 -0
- package/.as-test/logs/simd/run.raw.spec.ts.log.json +309 -0
- package/.as-test/logs/simd/run.resolving.spec.ts.log.json +273 -0
- package/.as-test/logs/simd/run.set.spec.ts.log.json +733 -0
- package/.as-test/logs/simd/run.staticarray.spec.ts.log.json +931 -0
- package/.as-test/logs/simd/run.string.spec.ts.log.json +2289 -0
- package/.as-test/logs/simd/run.struct.spec.ts.log.json +523 -0
- package/.as-test/logs/simd/run.types.spec.ts.log.json +273 -0
- package/.as-test/logs/simd/test.arbitrary.spec.ts.log.json +943 -0
- package/.as-test/logs/simd/test.array.spec.ts.log.json +1053 -0
- package/.as-test/logs/simd/test.bool.spec.ts.log.json +257 -0
- package/.as-test/logs/simd/test.box.spec.ts.log.json +353 -0
- package/.as-test/logs/simd/test.custom.spec.ts.log.json +309 -0
- package/.as-test/logs/simd/test.date.spec.ts.log.json +397 -0
- package/.as-test/logs/simd/test.enum.spec.ts.log.json +343 -0
- package/.as-test/logs/simd/test.float.spec.ts.log.json +453 -0
- package/.as-test/logs/simd/test.generics.spec.ts.log.json +393 -0
- package/.as-test/logs/simd/test.hierarchy.spec.ts.log.json +325 -0
- package/.as-test/logs/simd/test.integer.spec.ts.log.json +373 -0
- package/.as-test/logs/simd/test.log.json +11371 -0
- package/.as-test/logs/simd/test.map.spec.ts.log.json +247 -0
- package/.as-test/logs/simd/test.namespace.spec.ts.log.json +361 -0
- package/.as-test/logs/simd/test.null.spec.ts.log.json +273 -0
- package/.as-test/logs/simd/test.raw.spec.ts.log.json +309 -0
- package/.as-test/logs/simd/test.resolving.spec.ts.log.json +273 -0
- package/.as-test/logs/simd/test.set.spec.ts.log.json +733 -0
- package/.as-test/logs/simd/test.staticarray.spec.ts.log.json +931 -0
- package/.as-test/logs/simd/test.string.spec.ts.log.json +2345 -0
- package/.as-test/logs/simd/test.struct.spec.ts.log.json +523 -0
- package/.as-test/logs/simd/test.types.spec.ts.log.json +273 -0
- package/.as-test/logs/swar/run.arbitrary.spec.ts.log.json +943 -0
- package/.as-test/logs/swar/run.array.spec.ts.log.json +1053 -0
- package/.as-test/logs/swar/run.bool.spec.ts.log.json +257 -0
- package/.as-test/logs/swar/run.box.spec.ts.log.json +353 -0
- package/.as-test/logs/swar/run.custom.spec.ts.log.json +309 -0
- package/.as-test/logs/swar/run.date.spec.ts.log.json +397 -0
- package/.as-test/logs/swar/run.enum.spec.ts.log.json +343 -0
- package/.as-test/logs/swar/run.float.spec.ts.log.json +453 -0
- package/.as-test/logs/swar/run.generics.spec.ts.log.json +393 -0
- package/.as-test/logs/swar/run.hierarchy.spec.ts.log.json +325 -0
- package/.as-test/logs/swar/run.integer.spec.ts.log.json +373 -0
- package/.as-test/logs/swar/run.map.spec.ts.log.json +247 -0
- package/.as-test/logs/swar/run.namespace.spec.ts.log.json +361 -0
- package/.as-test/logs/swar/run.null.spec.ts.log.json +273 -0
- package/.as-test/logs/swar/run.raw.spec.ts.log.json +309 -0
- package/.as-test/logs/swar/run.resolving.spec.ts.log.json +273 -0
- package/.as-test/logs/swar/run.set.spec.ts.log.json +733 -0
- package/.as-test/logs/swar/run.staticarray.spec.ts.log.json +931 -0
- package/.as-test/logs/swar/run.string.spec.ts.log.json +2289 -0
- package/.as-test/logs/swar/run.struct.spec.ts.log.json +523 -0
- package/.as-test/logs/swar/run.types.spec.ts.log.json +273 -0
- package/.as-test/logs/swar/test.arbitrary.spec.ts.log.json +943 -0
- package/.as-test/logs/swar/test.array.spec.ts.log.json +1053 -0
- package/.as-test/logs/swar/test.bool.spec.ts.log.json +257 -0
- package/.as-test/logs/swar/test.box.spec.ts.log.json +353 -0
- package/.as-test/logs/swar/test.custom.spec.ts.log.json +309 -0
- package/.as-test/logs/swar/test.date.spec.ts.log.json +397 -0
- package/.as-test/logs/swar/test.enum.spec.ts.log.json +343 -0
- package/.as-test/logs/swar/test.float.spec.ts.log.json +453 -0
- package/.as-test/logs/swar/test.generics.spec.ts.log.json +393 -0
- package/.as-test/logs/swar/test.hierarchy.spec.ts.log.json +325 -0
- package/.as-test/logs/swar/test.integer.spec.ts.log.json +373 -0
- package/.as-test/logs/swar/test.log.json +11371 -0
- package/.as-test/logs/swar/test.map.spec.ts.log.json +247 -0
- package/.as-test/logs/swar/test.namespace.spec.ts.log.json +361 -0
- package/.as-test/logs/swar/test.null.spec.ts.log.json +273 -0
- package/.as-test/logs/swar/test.raw.spec.ts.log.json +309 -0
- package/.as-test/logs/swar/test.resolving.spec.ts.log.json +273 -0
- package/.as-test/logs/swar/test.set.spec.ts.log.json +733 -0
- package/.as-test/logs/swar/test.staticarray.spec.ts.log.json +931 -0
- package/.as-test/logs/swar/test.string.spec.ts.log.json +2345 -0
- package/.as-test/logs/swar/test.struct.spec.ts.log.json +523 -0
- package/.as-test/logs/swar/test.types.spec.ts.log.json +273 -0
- package/.as-test/logs/test.arbitrary.spec.ts.log.json +943 -0
- package/.as-test/logs/test.array.spec.ts.log.json +1053 -0
- package/.as-test/logs/test.bool.spec.ts.log.json +257 -0
- package/.as-test/logs/test.box.spec.ts.log.json +353 -0
- package/.as-test/logs/test.custom.spec.ts.log.json +309 -0
- package/.as-test/logs/test.date.spec.ts.log.json +397 -0
- package/.as-test/logs/test.enum.spec.ts.log.json +343 -0
- package/.as-test/logs/test.float.spec.ts.log.json +453 -0
- package/.as-test/logs/test.generics.spec.ts.log.json +393 -0
- package/.as-test/logs/test.hierarchy.spec.ts.log.json +325 -0
- package/.as-test/logs/test.integer.spec.ts.log.json +373 -0
- package/.as-test/logs/test.log.json +11371 -0
- package/.as-test/logs/test.map.spec.ts.log.json +247 -0
- package/.as-test/logs/test.namespace.spec.ts.log.json +361 -0
- package/.as-test/logs/test.null.spec.ts.log.json +273 -0
- package/.as-test/logs/test.raw.spec.ts.log.json +309 -0
- package/.as-test/logs/test.resolving.spec.ts.log.json +273 -0
- package/.as-test/logs/test.set.spec.ts.log.json +733 -0
- package/.as-test/logs/test.staticarray.spec.ts.log.json +931 -0
- package/.as-test/logs/test.string.spec.ts.log.json +2289 -0
- package/.as-test/logs/test.struct.spec.ts.log.json +523 -0
- package/.as-test/logs/test.types.spec.ts.log.json +273 -0
- package/.as-test/runners/default.bindings.js +68 -0
- package/.as-test/runners/default.wasi.js +38 -0
- package/ARCHITECTURE.md +6 -3
- package/CONTRIBUTING.md +9 -3
- package/README.md +40 -21
- package/as-test.config.json +40 -0
- package/assembly/deserialize/float.ts +181 -0
- package/assembly/deserialize/helpers/uint.ts +12 -0
- package/assembly/deserialize/index/arbitrary.ts +25 -0
- package/assembly/deserialize/index/array.ts +61 -0
- package/assembly/deserialize/index/bool.ts +1 -0
- package/assembly/deserialize/index/date.ts +1 -0
- package/assembly/deserialize/index/float.ts +1 -0
- package/assembly/deserialize/index/integer.ts +1 -0
- package/assembly/deserialize/index/map.ts +1 -0
- package/assembly/deserialize/index/object.ts +1 -0
- package/assembly/deserialize/index/raw.ts +1 -0
- package/assembly/deserialize/index/set.ts +1 -0
- package/assembly/deserialize/index/staticarray.ts +1 -0
- package/assembly/deserialize/index/string.ts +15 -0
- package/assembly/deserialize/index/struct.ts +1 -0
- package/assembly/deserialize/index/typedarray.ts +1 -0
- package/assembly/deserialize/index/unsigned.ts +1 -0
- package/assembly/deserialize/index.ts +14 -0
- package/assembly/deserialize/integer.ts +42 -0
- package/assembly/deserialize/simd/array/integer.ts +307 -0
- package/assembly/deserialize/simd/string.ts +131 -10
- package/assembly/deserialize/simple/arbitrary.ts +2 -2
- package/assembly/deserialize/simple/array/arbitrary.ts +13 -20
- package/assembly/deserialize/simple/array/raw.ts +14 -21
- package/assembly/deserialize/simple/array/string.ts +3 -2
- package/assembly/deserialize/simple/array.ts +1 -0
- package/assembly/deserialize/simple/map.ts +14 -19
- package/assembly/deserialize/simple/object.ts +14 -19
- package/assembly/deserialize/simple/set.ts +9 -9
- package/assembly/deserialize/simple/staticarray/array.ts +12 -3
- package/assembly/deserialize/simple/staticarray/bool.ts +6 -2
- package/assembly/deserialize/simple/staticarray/float.ts +12 -3
- package/assembly/deserialize/simple/staticarray/integer.ts +6 -2
- package/assembly/deserialize/simple/staticarray/string.ts +5 -4
- package/assembly/deserialize/simple/staticarray/struct.ts +30 -7
- package/assembly/deserialize/simple/staticarray.ts +56 -12
- package/assembly/deserialize/simple/string.ts +1 -1
- package/assembly/deserialize/simple/struct.ts +12 -20
- package/assembly/deserialize/simple/typedarray.ts +94 -0
- package/assembly/deserialize/swar/array/arbitrary.ts +8 -0
- package/assembly/deserialize/swar/array/array.ts +39 -0
- package/assembly/deserialize/swar/array/bool.ts +47 -0
- package/assembly/deserialize/swar/array/box.ts +8 -0
- package/assembly/deserialize/swar/array/float.ts +39 -0
- package/assembly/deserialize/swar/array/integer.ts +461 -0
- package/assembly/deserialize/swar/array/map.ts +7 -0
- package/assembly/deserialize/swar/array/object.ts +44 -0
- package/assembly/deserialize/swar/array/raw.ts +8 -0
- package/assembly/deserialize/swar/array/shared.ts +96 -0
- package/assembly/deserialize/swar/array/string.ts +39 -0
- package/assembly/deserialize/swar/array/struct.ts +44 -0
- package/assembly/deserialize/swar/array.ts +49 -0
- package/assembly/deserialize/swar/string.ts +653 -14
- package/assembly/deserialize/unsigned.ts +75 -0
- package/assembly/index.d.ts +2 -2
- package/assembly/index.ts +214 -132
- package/assembly/serialize/index/arbitrary.ts +70 -0
- package/assembly/serialize/index/array.ts +1 -0
- package/assembly/serialize/index/bool.ts +1 -0
- package/assembly/serialize/index/date.ts +1 -0
- package/assembly/serialize/index/float.ts +1 -0
- package/assembly/serialize/index/integer.ts +1 -0
- package/assembly/serialize/index/map.ts +1 -0
- package/assembly/serialize/index/object.ts +46 -0
- package/assembly/serialize/index/raw.ts +1 -0
- package/assembly/serialize/index/set.ts +1 -0
- package/assembly/serialize/index/staticarray.ts +1 -0
- package/assembly/serialize/index/string.ts +15 -0
- package/assembly/serialize/index/struct.ts +1 -0
- package/assembly/serialize/index/typedarray.ts +1 -0
- package/assembly/serialize/index.ts +13 -0
- package/assembly/serialize/simd/string.ts +68 -68
- package/assembly/serialize/simple/string.ts +9 -10
- package/assembly/serialize/simple/typedarray.ts +63 -0
- package/assembly/serialize/swar/string.ts +26 -32
- package/assembly/test.ts +20 -20
- package/assembly/tsconfig.json +16 -1
- package/assembly/util/index.ts +1 -0
- package/assembly/util/masks.ts +17 -24
- package/assembly/util/memory.ts +0 -0
- package/assembly/util/stringScan.ts +24 -0
- package/assembly/util/swar.ts +2 -9
- package/eslint.config.js +43 -52
- package/lib/as-bs.ts +72 -77
- package/package.json +13 -9
- package/test.ts +99 -0
- package/tools/assemblyscript-eslint-local.js +6 -0
- package/tools/assemblyscript-eslint.js +53 -0
- package/tools/assemblyscript-prettier-plugin.js +33 -0
- package/tools/replacer.js +63 -0
- package/transform/lib/index.d.ts.map +1 -1
- package/transform/lib/index.js +397 -64
- package/transform/lib/index.js.map +1 -1
- package/transform/lib/types.d.ts +4 -0
- package/transform/lib/types.d.ts.map +1 -1
- package/transform/lib/types.js +62 -0
- package/transform/lib/types.js.map +1 -1
- package/transform/tsconfig.json +2 -6
- package/.claude/settings.local.json +0 -9
- package/assembly/deserialize/simple/float.ts +0 -11
- package/assembly/deserialize/simple/integer.ts +0 -6
|
@@ -1,6 +1,6 @@
|
|
|
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
|
-
import { isSpace } from "../../util";
|
|
3
|
+
import { isSpace, isUnescapedQuote, scanStringEnd } from "../../util";
|
|
4
4
|
|
|
5
5
|
// @ts-ignore: Decorator is valid here
|
|
6
6
|
@inline function normalizeQuotes<T>(start: usize, end: usize): T {
|
|
@@ -30,7 +30,7 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
|
|
|
30
30
|
while (srcStart < srcEnd) {
|
|
31
31
|
let code = load<u16>(srcStart); // while (isSpace(code)) code = load<u16>(srcStart += 2);
|
|
32
32
|
if (keyStart == 0) {
|
|
33
|
-
if (code == QUOTE &&
|
|
33
|
+
if (code == QUOTE && isUnescapedQuote(srcStart)) {
|
|
34
34
|
if (isKey) {
|
|
35
35
|
keyStart = lastIndex;
|
|
36
36
|
keyEnd = srcStart;
|
|
@@ -50,21 +50,13 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
|
|
|
50
50
|
} else {
|
|
51
51
|
if (code == QUOTE) {
|
|
52
52
|
lastIndex = srcStart;
|
|
53
|
+
srcStart = scanStringEnd(srcStart, srcEnd);
|
|
54
|
+
if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
|
|
55
|
+
// @ts-ignore: type
|
|
56
|
+
out.set(normalizeQuotes<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, srcStart + 2));
|
|
53
57
|
srcStart += 2;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
if (code == QUOTE && load<u16>(srcStart - 2) !== BACK_SLASH) {
|
|
57
|
-
// console.log("Value (string): " + ptrToStr(lastIndex, srcStart + 2));
|
|
58
|
-
// @ts-ignore: type
|
|
59
|
-
out.set(normalizeQuotes<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, srcStart + 2));
|
|
60
|
-
// while (isSpace(load<u16>(srcStart))) srcStart += 2;
|
|
61
|
-
srcStart += 4;
|
|
62
|
-
// console.log("Next: " + String.fromCharCode(load<u16>(srcStart)));
|
|
63
|
-
keyStart = 0;
|
|
64
|
-
break;
|
|
65
|
-
}
|
|
66
|
-
srcStart += 2;
|
|
67
|
-
}
|
|
58
|
+
keyStart = 0;
|
|
59
|
+
continue;
|
|
68
60
|
} else if (code - 48 <= 9 || code == 45) {
|
|
69
61
|
lastIndex = srcStart;
|
|
70
62
|
srcStart += 2;
|
|
@@ -91,8 +83,8 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
|
|
|
91
83
|
while (srcStart < srcEnd) {
|
|
92
84
|
const code = load<u16>(srcStart);
|
|
93
85
|
if (code == QUOTE) {
|
|
94
|
-
srcStart
|
|
95
|
-
|
|
86
|
+
srcStart = scanStringEnd(srcStart, srcEnd);
|
|
87
|
+
if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
|
|
96
88
|
} else if (code == BRACE_RIGHT) {
|
|
97
89
|
if (--depth == 0) {
|
|
98
90
|
// console.log("Value (object): " + ptrToStr(lastIndex, srcStart + 2));
|
|
@@ -114,7 +106,10 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
|
|
|
114
106
|
srcStart += 2;
|
|
115
107
|
while (srcStart < srcEnd) {
|
|
116
108
|
const code = load<u16>(srcStart);
|
|
117
|
-
if (code ==
|
|
109
|
+
if (code == QUOTE) {
|
|
110
|
+
srcStart = scanStringEnd(srcStart, srcEnd);
|
|
111
|
+
if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
|
|
112
|
+
} else if (code == BRACKET_RIGHT) {
|
|
118
113
|
if (--depth == 0) {
|
|
119
114
|
// console.log("Value (array): " + ptrToStr(lastIndex, srcStart + 2));
|
|
120
115
|
// @ts-ignore: type
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { JSON } from "../..";
|
|
2
2
|
import { bs } from "../../../lib/as-bs";
|
|
3
3
|
import { BACK_SLASH, COMMA, CHAR_F, BRACE_LEFT, BRACKET_LEFT, CHAR_N, QUOTE, BRACE_RIGHT, BRACKET_RIGHT, CHAR_T, COLON } from "../../custom/chars";
|
|
4
|
-
import { isSpace } from "../../util";
|
|
4
|
+
import { isSpace, isUnescapedQuote, scanStringEnd } from "../../util";
|
|
5
5
|
import { ptrToStr } from "../../util/ptrToStr";
|
|
6
6
|
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 {
|
|
@@ -30,7 +30,7 @@ export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): J
|
|
|
30
30
|
while (srcStart < srcEnd) {
|
|
31
31
|
let code = load<u16>(srcStart); // while (isSpace(code)) code = load<u16>(srcStart += 2);
|
|
32
32
|
if (keyStart == 0) {
|
|
33
|
-
if (code == QUOTE &&
|
|
33
|
+
if (code == QUOTE && isUnescapedQuote(srcStart)) {
|
|
34
34
|
if (isKey) {
|
|
35
35
|
keyStart = lastIndex;
|
|
36
36
|
keyEnd = srcStart;
|
|
@@ -50,20 +50,12 @@ export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): J
|
|
|
50
50
|
} else {
|
|
51
51
|
if (code == QUOTE) {
|
|
52
52
|
lastIndex = srcStart;
|
|
53
|
+
srcStart = scanStringEnd(srcStart, srcEnd);
|
|
54
|
+
if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
|
|
55
|
+
out.set(ptrToStr(keyStart, keyEnd), deserializeString(lastIndex, srcStart + 2));
|
|
53
56
|
srcStart += 2;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
if (code == QUOTE && load<u16>(srcStart - 2) !== BACK_SLASH) {
|
|
57
|
-
// console.log("Value (string):-" + deserializeString_SWAR(lastIndex, srcStart + 2, 0) + "-");
|
|
58
|
-
out.set(ptrToStr(keyStart, keyEnd), deserializeString(lastIndex, srcStart + 2));
|
|
59
|
-
// while (isSpace(load<u16>(srcStart))) srcStart += 2;
|
|
60
|
-
srcStart += 4;
|
|
61
|
-
// console.log("Next: " + String.fromCharCode(load<u16>(srcStart)));
|
|
62
|
-
keyStart = 0;
|
|
63
|
-
break;
|
|
64
|
-
}
|
|
65
|
-
srcStart += 2;
|
|
66
|
-
}
|
|
57
|
+
keyStart = 0;
|
|
58
|
+
continue;
|
|
67
59
|
} else if (code - 48 <= 9 || code == 45) {
|
|
68
60
|
lastIndex = srcStart;
|
|
69
61
|
srcStart += 2;
|
|
@@ -89,8 +81,8 @@ export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): J
|
|
|
89
81
|
while (srcStart < srcEnd) {
|
|
90
82
|
const code = load<u16>(srcStart);
|
|
91
83
|
if (code == QUOTE) {
|
|
92
|
-
srcStart
|
|
93
|
-
|
|
84
|
+
srcStart = scanStringEnd(srcStart, srcEnd);
|
|
85
|
+
if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
|
|
94
86
|
} else if (code == BRACE_RIGHT) {
|
|
95
87
|
if (--depth == 0) {
|
|
96
88
|
// console.log("Value (object): " + ptrToStr(lastIndex, srcStart + 2));
|
|
@@ -111,7 +103,10 @@ export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): J
|
|
|
111
103
|
srcStart += 2;
|
|
112
104
|
while (srcStart < srcEnd) {
|
|
113
105
|
const code = load<u16>(srcStart);
|
|
114
|
-
if (code ==
|
|
106
|
+
if (code == QUOTE) {
|
|
107
|
+
srcStart = scanStringEnd(srcStart, srcEnd);
|
|
108
|
+
if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
|
|
109
|
+
} else if (code == BRACKET_RIGHT) {
|
|
115
110
|
if (--depth == 0) {
|
|
116
111
|
// console.log("Value (array): " + ptrToStr(lastIndex, srcStart + 2));
|
|
117
112
|
out.set(ptrToStr(keyStart, keyEnd), deserializeArray<JSON.Value[]>(lastIndex, (srcStart += 2), 0));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { JSON } from "../..";
|
|
2
2
|
import { BACK_SLASH, BRACKET_LEFT, BRACKET_RIGHT, BRACE_LEFT, BRACE_RIGHT, CHAR_F, CHAR_N, CHAR_T, COMMA, QUOTE } from "../../custom/chars";
|
|
3
|
-
import { isSpace, atoi } from "../../util";
|
|
3
|
+
import { isSpace, atoi, isUnescapedQuote, scanStringEnd } from "../../util";
|
|
4
4
|
|
|
5
5
|
export function deserializeSet<T extends Set<any>>(srcStart: usize, srcEnd: usize, dst: usize): T {
|
|
6
6
|
const out = changetype<nonnull<T>>(dst || changetype<usize>(instantiate<T>()));
|
|
@@ -25,7 +25,7 @@ export function deserializeSet<T extends Set<any>>(srcStart: usize, srcEnd: usiz
|
|
|
25
25
|
srcStart += 2;
|
|
26
26
|
while (srcStart < srcEnd) {
|
|
27
27
|
const c = load<u16>(srcStart);
|
|
28
|
-
if (c == QUOTE &&
|
|
28
|
+
if (c == QUOTE && isUnescapedQuote(srcStart)) {
|
|
29
29
|
// @ts-ignore: type
|
|
30
30
|
out.add(JSON.__deserialize<indexof<T>>(lastIndex, srcStart + 2));
|
|
31
31
|
srcStart += 2;
|
|
@@ -34,7 +34,7 @@ export function deserializeSet<T extends Set<any>>(srcStart: usize, srcEnd: usiz
|
|
|
34
34
|
srcStart += 2;
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
-
|
|
37
|
+
// @ts-ignore: type
|
|
38
38
|
} else if (isBoolean<indexof<T>>()) {
|
|
39
39
|
if (code == CHAR_T) {
|
|
40
40
|
// @ts-ignore: type
|
|
@@ -45,7 +45,7 @@ export function deserializeSet<T extends Set<any>>(srcStart: usize, srcEnd: usiz
|
|
|
45
45
|
out.add(<indexof<T>>false);
|
|
46
46
|
srcStart += 10;
|
|
47
47
|
}
|
|
48
|
-
|
|
48
|
+
// @ts-ignore: type
|
|
49
49
|
} else if (isInteger<indexof<T>>()) {
|
|
50
50
|
if (code - 48 <= 9 || code == 45) {
|
|
51
51
|
const lastIndex = srcStart;
|
|
@@ -60,7 +60,7 @@ export function deserializeSet<T extends Set<any>>(srcStart: usize, srcEnd: usiz
|
|
|
60
60
|
srcStart += 2;
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
|
|
63
|
+
// @ts-ignore: type
|
|
64
64
|
} else if (isFloat<indexof<T>>()) {
|
|
65
65
|
if (code - 48 <= 9 || code == 45) {
|
|
66
66
|
const lastIndex = srcStart;
|
|
@@ -75,7 +75,7 @@ export function deserializeSet<T extends Set<any>>(srcStart: usize, srcEnd: usiz
|
|
|
75
75
|
srcStart += 2;
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
-
|
|
78
|
+
// @ts-ignore: type
|
|
79
79
|
} else if (isManaged<indexof<T>>() || isReference<indexof<T>>()) {
|
|
80
80
|
// @ts-ignore: type
|
|
81
81
|
const type = changetype<nonnull<indexof<T>>>(0);
|
|
@@ -87,8 +87,8 @@ export function deserializeSet<T extends Set<any>>(srcStart: usize, srcEnd: usiz
|
|
|
87
87
|
while (srcStart < srcEnd) {
|
|
88
88
|
const c = load<u16>(srcStart);
|
|
89
89
|
if (c == QUOTE) {
|
|
90
|
-
srcStart
|
|
91
|
-
|
|
90
|
+
srcStart = scanStringEnd(srcStart, srcEnd);
|
|
91
|
+
if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON set");
|
|
92
92
|
} else if (c == BRACE_RIGHT) {
|
|
93
93
|
if (--depth == 0) {
|
|
94
94
|
srcStart += 2;
|
|
@@ -127,7 +127,7 @@ export function deserializeSet<T extends Set<any>>(srcStart: usize, srcEnd: usiz
|
|
|
127
127
|
srcStart += 2;
|
|
128
128
|
while (srcStart < srcEnd) {
|
|
129
129
|
const c = load<u16>(srcStart);
|
|
130
|
-
if (c == QUOTE &&
|
|
130
|
+
if (c == QUOTE && isUnescapedQuote(srcStart)) {
|
|
131
131
|
// @ts-ignore: type
|
|
132
132
|
out.add(JSON.__deserialize<indexof<T>>(lastIndex, srcStart + 2));
|
|
133
133
|
srcStart += 2;
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { BRACKET_LEFT, BRACKET_RIGHT } from "../../../custom/chars";
|
|
2
2
|
import { JSON } from "../../../";
|
|
3
3
|
|
|
4
|
-
export function deserializeStaticArrayArray<T extends StaticArray<any>>(
|
|
4
|
+
export function deserializeStaticArrayArray<T extends StaticArray<any>>(
|
|
5
|
+
srcStart: usize,
|
|
6
|
+
srcEnd: usize,
|
|
7
|
+
dst: usize,
|
|
8
|
+
): T {
|
|
5
9
|
let count: i32 = 0;
|
|
6
10
|
let depth: u32 = 0;
|
|
7
11
|
let ptr = srcStart + 2;
|
|
@@ -15,7 +19,7 @@ export function deserializeStaticArrayArray<T extends StaticArray<any>>(srcStart
|
|
|
15
19
|
ptr += 2;
|
|
16
20
|
}
|
|
17
21
|
|
|
18
|
-
const outSize =
|
|
22
|
+
const outSize = count << (alignof<valueof<T>>());
|
|
19
23
|
const out = changetype<nonnull<T>>(dst || __new(outSize, idof<T>()));
|
|
20
24
|
|
|
21
25
|
// Second pass: populate values
|
|
@@ -28,7 +32,12 @@ export function deserializeStaticArrayArray<T extends StaticArray<any>>(srcStart
|
|
|
28
32
|
if (code == BRACKET_LEFT && depth++ == 0) {
|
|
29
33
|
lastIndex = srcStart;
|
|
30
34
|
} else if (code == BRACKET_RIGHT && --depth == 0) {
|
|
31
|
-
unchecked(
|
|
35
|
+
unchecked(
|
|
36
|
+
(out[index++] = JSON.__deserialize<valueof<T>>(
|
|
37
|
+
lastIndex,
|
|
38
|
+
srcStart + 2,
|
|
39
|
+
)),
|
|
40
|
+
);
|
|
32
41
|
}
|
|
33
42
|
srcStart += 2;
|
|
34
43
|
}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
export function deserializeStaticArrayBoolean<T extends StaticArray<any>>(
|
|
1
|
+
export function deserializeStaticArrayBoolean<T extends StaticArray<any>>(
|
|
2
|
+
srcStart: usize,
|
|
3
|
+
srcEnd: usize,
|
|
4
|
+
dst: usize,
|
|
5
|
+
): T {
|
|
2
6
|
// First pass: count elements using same logic as Array deserializer
|
|
3
7
|
let count: i32 = 0;
|
|
4
8
|
let ptr = srcStart + 2; // skip [
|
|
@@ -16,7 +20,7 @@ export function deserializeStaticArrayBoolean<T extends StaticArray<any>>(srcSta
|
|
|
16
20
|
}
|
|
17
21
|
|
|
18
22
|
// Allocate StaticArray with correct size
|
|
19
|
-
const outSize =
|
|
23
|
+
const outSize = count << (alignof<valueof<T>>());
|
|
20
24
|
const out = changetype<nonnull<T>>(dst || __new(outSize, idof<T>()));
|
|
21
25
|
|
|
22
26
|
// Second pass: populate values
|
|
@@ -2,7 +2,11 @@ import { isSpace } from "../../../util";
|
|
|
2
2
|
import { COMMA, BRACKET_RIGHT } from "../../../custom/chars";
|
|
3
3
|
import { JSON } from "../../..";
|
|
4
4
|
|
|
5
|
-
export function deserializeStaticArrayFloat<T extends StaticArray<any>>(
|
|
5
|
+
export function deserializeStaticArrayFloat<T extends StaticArray<any>>(
|
|
6
|
+
srcStart: usize,
|
|
7
|
+
srcEnd: usize,
|
|
8
|
+
dst: usize,
|
|
9
|
+
): T {
|
|
6
10
|
let count: i32 = 0;
|
|
7
11
|
let ptr = srcStart;
|
|
8
12
|
while (ptr < srcEnd) {
|
|
@@ -19,7 +23,7 @@ export function deserializeStaticArrayFloat<T extends StaticArray<any>>(srcStart
|
|
|
19
23
|
ptr += 2;
|
|
20
24
|
}
|
|
21
25
|
|
|
22
|
-
const outSize =
|
|
26
|
+
const outSize = count << (alignof<valueof<T>>());
|
|
23
27
|
const out = changetype<nonnull<T>>(dst || __new(outSize, idof<T>()));
|
|
24
28
|
|
|
25
29
|
let index = 0;
|
|
@@ -31,7 +35,12 @@ export function deserializeStaticArrayFloat<T extends StaticArray<any>>(srcStart
|
|
|
31
35
|
while (srcStart < srcEnd) {
|
|
32
36
|
const code = load<u16>(srcStart);
|
|
33
37
|
if (code == COMMA || code == BRACKET_RIGHT || isSpace(code)) {
|
|
34
|
-
unchecked(
|
|
38
|
+
unchecked(
|
|
39
|
+
(out[index++] = JSON.__deserialize<valueof<T>>(
|
|
40
|
+
lastIndex,
|
|
41
|
+
srcStart,
|
|
42
|
+
)),
|
|
43
|
+
);
|
|
35
44
|
break;
|
|
36
45
|
}
|
|
37
46
|
srcStart += 2;
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { atoi, isSpace } from "../../../util";
|
|
2
2
|
import { COMMA, BRACKET_RIGHT } from "../../../custom/chars";
|
|
3
3
|
|
|
4
|
-
export function deserializeStaticArrayInteger<T extends StaticArray<any>>(
|
|
4
|
+
export function deserializeStaticArrayInteger<T extends StaticArray<any>>(
|
|
5
|
+
srcStart: usize,
|
|
6
|
+
srcEnd: usize,
|
|
7
|
+
dst: usize,
|
|
8
|
+
): T {
|
|
5
9
|
let count: i32 = 0;
|
|
6
10
|
let ptr = srcStart;
|
|
7
11
|
while (ptr < srcEnd) {
|
|
@@ -18,7 +22,7 @@ export function deserializeStaticArrayInteger<T extends StaticArray<any>>(srcSta
|
|
|
18
22
|
ptr += 2;
|
|
19
23
|
}
|
|
20
24
|
|
|
21
|
-
const outSize =
|
|
25
|
+
const outSize = count << (alignof<valueof<T>>());
|
|
22
26
|
const out = changetype<nonnull<T>>(dst || __new(outSize, idof<T>()));
|
|
23
27
|
|
|
24
28
|
// Second pass: populate values
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { JSON } from "../../..";
|
|
2
|
-
import {
|
|
2
|
+
import { QUOTE } from "../../../custom/chars";
|
|
3
|
+
import { isUnescapedQuote } from "../../../util";
|
|
3
4
|
|
|
4
5
|
export function deserializeStaticArrayString(srcStart: usize, srcEnd: usize, dst: usize): StaticArray<string> {
|
|
5
6
|
// First pass: count elements using same logic as Array deserializer
|
|
@@ -11,7 +12,7 @@ export function deserializeStaticArrayString(srcStart: usize, srcEnd: usize, dst
|
|
|
11
12
|
if (code == QUOTE) {
|
|
12
13
|
if (!inString) {
|
|
13
14
|
inString = true;
|
|
14
|
-
} else if (
|
|
15
|
+
} else if (isUnescapedQuote(ptr)) {
|
|
15
16
|
count++;
|
|
16
17
|
inString = false;
|
|
17
18
|
}
|
|
@@ -20,7 +21,7 @@ export function deserializeStaticArrayString(srcStart: usize, srcEnd: usize, dst
|
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
// Allocate StaticArray with correct size
|
|
23
|
-
const outSize = <usize>count << alignof<string>();
|
|
24
|
+
const outSize = (<usize>count) << alignof<string>();
|
|
24
25
|
const out = changetype<StaticArray<string>>(dst || __new(outSize, idof<StaticArray<string>>()));
|
|
25
26
|
|
|
26
27
|
// Second pass: populate values
|
|
@@ -33,7 +34,7 @@ export function deserializeStaticArrayString(srcStart: usize, srcEnd: usize, dst
|
|
|
33
34
|
if (!inString) {
|
|
34
35
|
inString = true;
|
|
35
36
|
lastPos = srcStart;
|
|
36
|
-
} else if (
|
|
37
|
+
} else if (isUnescapedQuote(srcStart)) {
|
|
37
38
|
unchecked((out[index++] = JSON.__deserialize<string>(lastPos, srcStart + 2)));
|
|
38
39
|
inString = false;
|
|
39
40
|
}
|
|
@@ -1,15 +1,33 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
BRACE_LEFT,
|
|
3
|
+
BRACE_RIGHT,
|
|
4
|
+
BRACKET_LEFT,
|
|
5
|
+
BRACKET_RIGHT,
|
|
6
|
+
} from "../../../custom/chars";
|
|
2
7
|
import { JSON } from "../../..";
|
|
3
8
|
import { isSpace } from "util/string";
|
|
4
9
|
|
|
5
|
-
export function deserializeStaticArrayStruct<T extends StaticArray<any>>(
|
|
10
|
+
export function deserializeStaticArrayStruct<T extends StaticArray<any>>(
|
|
11
|
+
srcStart: usize,
|
|
12
|
+
srcEnd: usize,
|
|
13
|
+
dst: usize,
|
|
14
|
+
): T {
|
|
6
15
|
while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
|
|
7
16
|
while (srcEnd > srcStart && isSpace(load<u16>(srcEnd - 2))) srcEnd -= 2;
|
|
8
17
|
|
|
9
|
-
if (srcStart - srcEnd == 0)
|
|
18
|
+
if (srcStart - srcEnd == 0)
|
|
19
|
+
throw new Error("Input string had zero length or was all whitespace");
|
|
10
20
|
|
|
11
|
-
if (load<u16>(srcStart) != BRACKET_LEFT)
|
|
12
|
-
|
|
21
|
+
if (load<u16>(srcStart) != BRACKET_LEFT)
|
|
22
|
+
throw new Error(
|
|
23
|
+
"Expected '[' at start of object at position " +
|
|
24
|
+
(srcEnd - srcStart).toString(),
|
|
25
|
+
);
|
|
26
|
+
if (load<u16>(srcEnd - 2) != BRACKET_RIGHT)
|
|
27
|
+
throw new Error(
|
|
28
|
+
"Expected ']' at end of object at position " +
|
|
29
|
+
(srcEnd - srcStart).toString(),
|
|
30
|
+
);
|
|
13
31
|
|
|
14
32
|
// First pass: count elements using same logic as Array deserializer
|
|
15
33
|
let count: i32 = 0;
|
|
@@ -26,7 +44,7 @@ export function deserializeStaticArrayStruct<T extends StaticArray<any>>(srcStar
|
|
|
26
44
|
}
|
|
27
45
|
|
|
28
46
|
// Allocate StaticArray with correct size
|
|
29
|
-
const outSize =
|
|
47
|
+
const outSize = count << (alignof<valueof<T>>());
|
|
30
48
|
const out = changetype<nonnull<T>>(dst || __new(outSize, idof<T>()));
|
|
31
49
|
|
|
32
50
|
// Second pass: populate values
|
|
@@ -38,7 +56,12 @@ export function deserializeStaticArrayStruct<T extends StaticArray<any>>(srcStar
|
|
|
38
56
|
if (code == BRACE_LEFT && depth++ == 0) {
|
|
39
57
|
lastIndex = srcStart;
|
|
40
58
|
} else if (code == BRACE_RIGHT && --depth == 0) {
|
|
41
|
-
unchecked(
|
|
59
|
+
unchecked(
|
|
60
|
+
(out[index++] = JSON.__deserialize<valueof<T>>(
|
|
61
|
+
lastIndex,
|
|
62
|
+
(srcStart += 2),
|
|
63
|
+
)),
|
|
64
|
+
);
|
|
42
65
|
}
|
|
43
66
|
srcStart += 2;
|
|
44
67
|
}
|
|
@@ -1,28 +1,72 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
|
|
2
|
+
import { JSON } from "../..";
|
|
3
|
+
import { deserializeArbitraryArray } from "./array/arbitrary";
|
|
4
|
+
import { deserializeArrayArray } from "./array/array";
|
|
5
|
+
import { deserializeBooleanArray } from "./array/bool";
|
|
6
|
+
import { deserializeBoxArray } from "./array/box";
|
|
7
|
+
import { deserializeFloatArray } from "./array/float";
|
|
8
|
+
import { deserializeIntegerArray } from "./array/integer";
|
|
9
|
+
import { deserializeMapArray } from "./array/map";
|
|
10
|
+
import { deserializeObjectArray } from "./array/object";
|
|
11
|
+
import { deserializeRawArray } from "./array/raw";
|
|
12
|
+
import { deserializeStructArray } from "./array/struct";
|
|
13
|
+
import { deserializeStringArray } from "./array/string";
|
|
3
14
|
import { deserializeStaticArrayBoolean } from "./staticarray/bool";
|
|
15
|
+
import { deserializeStaticArrayFloat } from "./staticarray/float";
|
|
16
|
+
import { deserializeStaticArrayInteger } from "./staticarray/integer";
|
|
4
17
|
import { deserializeStaticArrayString } from "./staticarray/string";
|
|
5
|
-
|
|
6
|
-
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@inline function materializeStaticArray<T extends StaticArray<any>>(src: valueof<T>[], dst: usize): T {
|
|
21
|
+
const byteLength = <usize>src.length * sizeof<valueof<T>>();
|
|
22
|
+
let out = dst;
|
|
23
|
+
|
|
24
|
+
if (!out) {
|
|
25
|
+
out = __new(byteLength, idof<T>());
|
|
26
|
+
} else if (changetype<OBJECT>(out - TOTAL_OVERHEAD).rtSize != byteLength) {
|
|
27
|
+
out = __renew(out, byteLength);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const typed = changetype<T>(out);
|
|
31
|
+
for (let i = 0; i < src.length; i++) {
|
|
32
|
+
unchecked((typed[i] = unchecked(src[i])));
|
|
33
|
+
}
|
|
34
|
+
return typed;
|
|
35
|
+
}
|
|
7
36
|
|
|
8
37
|
export function deserializeStaticArray<T extends StaticArray<any>>(srcStart: usize, srcEnd: usize, dst: usize): T {
|
|
9
38
|
if (isString<valueof<T>>()) {
|
|
10
|
-
return <T>deserializeStaticArrayString(srcStart, srcEnd, dst);
|
|
39
|
+
return changetype<T>(deserializeStaticArrayString(srcStart, srcEnd, dst));
|
|
11
40
|
} else if (isBoolean<valueof<T>>()) {
|
|
12
41
|
return deserializeStaticArrayBoolean<T>(srcStart, srcEnd, dst);
|
|
13
42
|
} else if (isInteger<valueof<T>>()) {
|
|
14
43
|
return deserializeStaticArrayInteger<T>(srcStart, srcEnd, dst);
|
|
15
44
|
} else if (isFloat<valueof<T>>()) {
|
|
16
45
|
return deserializeStaticArrayFloat<T>(srcStart, srcEnd, dst);
|
|
17
|
-
} else if (
|
|
18
|
-
return
|
|
46
|
+
} else if (isArray<valueof<T>>()) {
|
|
47
|
+
return materializeStaticArray<T>(deserializeArrayArray<valueof<T>[]>(srcStart, srcEnd, 0), dst);
|
|
19
48
|
} else if (isManaged<valueof<T>>() || isReference<valueof<T>>()) {
|
|
20
49
|
const type = changetype<nonnull<valueof<T>>>(0);
|
|
21
|
-
if (
|
|
22
|
-
return
|
|
50
|
+
if (type instanceof StaticArray) {
|
|
51
|
+
return materializeStaticArray<T>(deserializeArrayArray<valueof<T>[]>(srcStart, srcEnd, 0), dst);
|
|
52
|
+
} else if (type instanceof JSON.Value) {
|
|
53
|
+
return materializeStaticArray<T>(changetype<valueof<T>[]>(deserializeArbitraryArray(srcStart, srcEnd, 0)), dst);
|
|
54
|
+
} else if (type instanceof JSON.Box) {
|
|
55
|
+
return materializeStaticArray<T>(changetype<valueof<T>[]>(deserializeBoxArray<valueof<T>[]>(srcStart, srcEnd, 0)), dst);
|
|
56
|
+
} else if (type instanceof JSON.Obj) {
|
|
57
|
+
return materializeStaticArray<T>(deserializeObjectArray<valueof<T>[]>(srcStart, srcEnd, 0), dst);
|
|
58
|
+
} else if (type instanceof JSON.Raw) {
|
|
59
|
+
return materializeStaticArray<T>(changetype<valueof<T>[]>(deserializeRawArray(srcStart, srcEnd, 0)), dst);
|
|
60
|
+
} else if (type instanceof Map) {
|
|
61
|
+
return materializeStaticArray<T>(deserializeMapArray<valueof<T>[]>(srcStart, srcEnd, 0), dst);
|
|
62
|
+
// @ts-ignore: supplied by transform
|
|
63
|
+
} else if (isDefined(type.__DESERIALIZE_CUSTOM)) {
|
|
64
|
+
return materializeStaticArray<T>(deserializeStructArray<valueof<T>[]>(srcStart, srcEnd, 0), dst);
|
|
65
|
+
// @ts-ignore: supplied by transform
|
|
66
|
+
} else if (isDefined(type.__DESERIALIZE)) {
|
|
67
|
+
return materializeStaticArray<T>(deserializeStructArray<valueof<T>[]>(srcStart, srcEnd, 0), dst);
|
|
23
68
|
}
|
|
24
|
-
throw new Error("Could not parse static array of type " + nameof<T>() + "!");
|
|
25
|
-
} else {
|
|
26
|
-
throw new Error("Could not parse static array of type " + nameof<T>() + "!");
|
|
27
69
|
}
|
|
70
|
+
|
|
71
|
+
throw new Error("Could not parse static array of type " + nameof<T>() + "!");
|
|
28
72
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BACK_SLASH, COMMA, CHAR_F, BRACE_LEFT, BRACKET_LEFT, CHAR_N, QUOTE, BRACE_RIGHT, BRACKET_RIGHT, CHAR_T, COLON } from "../../custom/chars";
|
|
2
|
-
import { isSpace } from "../../util";
|
|
2
|
+
import { isSpace, isUnescapedQuote, scanStringEnd } from "../../util";
|
|
3
3
|
|
|
4
4
|
export function deserializeStruct<T>(srcStart: usize, srcEnd: usize, dst: usize): T {
|
|
5
5
|
const out = changetype<nonnull<T>>(dst || __new(offsetof<T>(), idof<T>()));
|
|
@@ -24,7 +24,7 @@ export function deserializeStruct<T>(srcStart: usize, srcEnd: usize, dst: usize)
|
|
|
24
24
|
while (srcStart < srcEnd) {
|
|
25
25
|
let code = load<u16>(srcStart); // while (isSpace(code)) code = load<u16>(srcStart += 2);
|
|
26
26
|
if (keyStart == 0) {
|
|
27
|
-
if (code == QUOTE &&
|
|
27
|
+
if (code == QUOTE && isUnescapedQuote(srcStart)) {
|
|
28
28
|
if (isKey) {
|
|
29
29
|
keyStart = lastIndex;
|
|
30
30
|
keyEnd = srcStart;
|
|
@@ -44,21 +44,13 @@ export function deserializeStruct<T>(srcStart: usize, srcEnd: usize, dst: usize)
|
|
|
44
44
|
} else {
|
|
45
45
|
if (code == QUOTE) {
|
|
46
46
|
lastIndex = srcStart;
|
|
47
|
+
srcStart = scanStringEnd(srcStart, srcEnd);
|
|
48
|
+
if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
|
|
49
|
+
// @ts-ignore: exists
|
|
50
|
+
out.__DESERIALIZE(keyStart, keyEnd, lastIndex, srcStart + 2, changetype<usize>(out));
|
|
47
51
|
srcStart += 2;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (code == QUOTE && load<u16>(srcStart - 2) !== BACK_SLASH) {
|
|
51
|
-
// console.log("Value (string): " + ptrToStr(lastIndex, srcStart + 2));
|
|
52
|
-
// @ts-ignore: exists
|
|
53
|
-
out.__DESERIALIZE(keyStart, keyEnd, lastIndex, srcStart + 2, changetype<usize>(out));
|
|
54
|
-
// while (isSpace(load<u16>(srcStart))) srcStart += 2;
|
|
55
|
-
srcStart += 4;
|
|
56
|
-
// console.log("Next: " + String.fromCharCode(load<u16>(srcStart)));
|
|
57
|
-
keyStart = 0;
|
|
58
|
-
break;
|
|
59
|
-
}
|
|
60
|
-
srcStart += 2;
|
|
61
|
-
}
|
|
52
|
+
keyStart = 0;
|
|
53
|
+
continue;
|
|
62
54
|
} else if (code - 48 <= 9 || code == 45) {
|
|
63
55
|
lastIndex = srcStart;
|
|
64
56
|
srcStart += 2;
|
|
@@ -85,8 +77,8 @@ export function deserializeStruct<T>(srcStart: usize, srcEnd: usize, dst: usize)
|
|
|
85
77
|
while (srcStart < srcEnd) {
|
|
86
78
|
const code = load<u16>(srcStart);
|
|
87
79
|
if (code == QUOTE) {
|
|
88
|
-
srcStart
|
|
89
|
-
|
|
80
|
+
srcStart = scanStringEnd(srcStart, srcEnd);
|
|
81
|
+
if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
|
|
90
82
|
} else if (code == BRACE_RIGHT) {
|
|
91
83
|
if (--depth == 0) {
|
|
92
84
|
// console.log("Value (object): " + ptrToStr(lastIndex, srcStart + 2));
|
|
@@ -109,8 +101,8 @@ export function deserializeStruct<T>(srcStart: usize, srcEnd: usize, dst: usize)
|
|
|
109
101
|
while (srcStart < srcEnd) {
|
|
110
102
|
const code = load<u16>(srcStart);
|
|
111
103
|
if (code == QUOTE) {
|
|
112
|
-
srcStart
|
|
113
|
-
|
|
104
|
+
srcStart = scanStringEnd(srcStart, srcEnd);
|
|
105
|
+
if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
|
|
114
106
|
} else if (code == BRACKET_RIGHT) {
|
|
115
107
|
if (--depth == 0) {
|
|
116
108
|
// console.log("Value (array): " + ptrToStr(lastIndex, srcStart + 2));
|