json-as 1.3.7 → 1.3.9
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 +36 -0
- package/README.md +1 -1
- package/assembly/deserialize/index/arbitrary.ts +2 -2
- package/assembly/deserialize/index/array.ts +29 -14
- package/assembly/deserialize/index/bool.ts +1 -1
- package/assembly/deserialize/index/date.ts +1 -1
- package/assembly/deserialize/index/float.ts +40 -1
- package/assembly/deserialize/index/integer.ts +3 -3
- package/assembly/deserialize/index/map.ts +1 -1
- package/assembly/deserialize/index/object.ts +1 -1
- package/assembly/deserialize/index/raw.ts +1 -1
- package/assembly/deserialize/index/set.ts +1 -1
- package/assembly/deserialize/index/staticarray.ts +4 -1
- package/assembly/deserialize/index/string.ts +28 -3
- package/assembly/deserialize/index/struct.ts +1 -1
- package/assembly/deserialize/index/typedarray.ts +25 -15
- package/assembly/deserialize/index/unsigned.ts +3 -3
- package/assembly/deserialize/index.ts +1 -0
- package/assembly/deserialize/naive/array/bool.ts +68 -0
- package/assembly/deserialize/naive/array/float.ts +63 -0
- package/assembly/deserialize/{simple → naive}/array/generic.ts +1 -2
- package/assembly/deserialize/naive/array/integer.ts +86 -0
- package/assembly/deserialize/{simple → naive}/array/map.ts +0 -1
- package/assembly/deserialize/{simple → naive}/array/object.ts +0 -1
- package/assembly/deserialize/naive/array/string.ts +69 -0
- package/assembly/deserialize/{simple → naive}/array/struct.ts +0 -1
- package/assembly/deserialize/{simple → naive}/array.ts +6 -11
- package/assembly/deserialize/naive/float.ts +135 -0
- package/assembly/deserialize/{simple → naive}/integer.ts +2 -2
- package/assembly/deserialize/{simple → naive}/map.ts +12 -6
- package/assembly/deserialize/{simple → naive}/object.ts +4 -7
- package/assembly/deserialize/{simple → naive}/set.ts +12 -27
- package/assembly/deserialize/{simple → naive}/staticarray/array.ts +1 -1
- package/assembly/deserialize/{simple → naive}/staticarray/bool.ts +1 -1
- package/assembly/deserialize/{simple → naive}/staticarray/float.ts +1 -1
- package/assembly/deserialize/{simple → naive}/staticarray/integer.ts +1 -1
- package/assembly/deserialize/{simple → naive}/staticarray/struct.ts +1 -2
- package/assembly/deserialize/{simple → naive}/staticarray.ts +4 -4
- package/assembly/deserialize/naive/string.ts +199 -0
- package/assembly/deserialize/{simple → naive}/typedarray.ts +4 -4
- package/assembly/deserialize/{simple → naive}/unsigned.ts +2 -2
- package/assembly/deserialize/simd/array/integer.ts +19 -19
- package/assembly/deserialize/simd/float.ts +303 -0
- package/assembly/deserialize/simd/string.ts +233 -108
- package/assembly/deserialize/swar/array/arbitrary.ts +6 -2
- package/assembly/deserialize/swar/array/array.ts +14 -7
- package/assembly/deserialize/swar/array/bool.ts +8 -3
- package/assembly/deserialize/swar/array/box.ts +6 -2
- package/assembly/deserialize/swar/array/float.ts +282 -6
- package/assembly/deserialize/swar/array/generic.ts +6 -2
- package/assembly/deserialize/swar/array/integer.ts +81 -74
- package/assembly/deserialize/swar/array/map.ts +6 -2
- package/assembly/deserialize/swar/array/object.ts +24 -32
- package/assembly/deserialize/swar/array/raw.ts +6 -2
- package/assembly/deserialize/swar/array/shared.ts +32 -8
- package/assembly/deserialize/swar/array/string.ts +127 -10
- package/assembly/deserialize/swar/array/struct.ts +45 -11
- package/assembly/deserialize/swar/array.ts +2 -56
- package/assembly/deserialize/swar/float.ts +304 -0
- package/assembly/deserialize/swar/string.ts +119 -104
- package/assembly/deserialize/swar/typedarray.ts +224 -0
- package/assembly/index.ts +203 -293
- package/assembly/serialize/index/array.ts +1 -1
- package/assembly/serialize/index/bool.ts +1 -1
- package/assembly/serialize/index/date.ts +1 -1
- package/assembly/serialize/index/float.ts +1 -1
- package/assembly/serialize/index/integer.ts +1 -1
- package/assembly/serialize/index/map.ts +1 -1
- package/assembly/serialize/index/raw.ts +1 -1
- package/assembly/serialize/index/set.ts +1 -1
- package/assembly/serialize/index/staticarray.ts +1 -1
- package/assembly/serialize/index/string.ts +1 -1
- package/assembly/serialize/index/struct.ts +1 -1
- package/assembly/serialize/index/typedarray.ts +2 -11
- package/assembly/serialize/index.ts +1 -0
- package/assembly/serialize/{simple → naive}/array.ts +87 -0
- package/assembly/serialize/{simple → naive}/string.ts +1 -1
- package/assembly/serialize/swar/string.ts +0 -139
- package/assembly/util/dragonbox.ts +10 -3
- package/assembly/util/itoa-fast.ts +29 -18
- package/assembly/util/scanValueEnd.ts +78 -0
- package/assembly/util/scientific.ts +132 -0
- package/lib/as-bs.ts +14 -1
- package/package.json +14 -13
- package/transform/lib/index.d.ts +4 -0
- package/transform/lib/index.d.ts.map +1 -1
- package/transform/lib/index.js +155 -238
- package/transform/lib/index.js.map +1 -1
- package/assembly/deserialize/simple/arbitrary.ts +0 -30
- package/assembly/deserialize/simple/array/bool.ts +0 -48
- package/assembly/deserialize/simple/array/float.ts +0 -55
- package/assembly/deserialize/simple/array/integer.ts +0 -33
- package/assembly/deserialize/simple/array/string.ts +0 -29
- package/assembly/deserialize/simple/float.ts +0 -206
- package/assembly/deserialize/simple/string.ts +0 -45
- package/assembly/serialize/simple/arbitrary.ts +0 -79
- package/assembly/serialize/simple/object.ts +0 -42
- /package/assembly/deserialize/{simple → naive}/array/arbitrary.ts +0 -0
- /package/assembly/deserialize/{simple → naive}/array/array.ts +0 -0
- /package/assembly/deserialize/{simple → naive}/array/box.ts +0 -0
- /package/assembly/deserialize/{simple → naive}/array/raw.ts +0 -0
- /package/assembly/deserialize/{simple → naive}/bool.ts +0 -0
- /package/assembly/deserialize/{simple → naive}/date.ts +0 -0
- /package/assembly/deserialize/{simple → naive}/raw.ts +0 -0
- /package/assembly/deserialize/{simple → naive}/staticarray/string.ts +0 -0
- /package/assembly/deserialize/{simple → naive}/struct.ts +0 -0
- /package/assembly/serialize/{simple → naive}/bool.ts +0 -0
- /package/assembly/serialize/{simple → naive}/date.ts +0 -0
- /package/assembly/serialize/{simple → naive}/float.ts +0 -0
- /package/assembly/serialize/{simple → naive}/integer.ts +0 -0
- /package/assembly/serialize/{simple → naive}/map.ts +0 -0
- /package/assembly/serialize/{simple → naive}/raw.ts +0 -0
- /package/assembly/serialize/{simple → naive}/set.ts +0 -0
- /package/assembly/serialize/{simple → naive}/staticarray.ts +0 -0
- /package/assembly/serialize/{simple → naive}/struct.ts +0 -0
- /package/assembly/serialize/{simple → naive}/typedarray.ts +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "json-as",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.9",
|
|
4
4
|
"author": "Jairus Tanaka",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -11,21 +11,22 @@
|
|
|
11
11
|
"devDependencies": {
|
|
12
12
|
"@assemblyscript/wasi-shim": "^0.1.0",
|
|
13
13
|
"@eslint/js": "^10.0.1",
|
|
14
|
-
"@types/node": "^25.
|
|
15
|
-
"as-
|
|
14
|
+
"@types/node": "^25.9.1",
|
|
15
|
+
"as-heap-analyzer": "^1.2.0",
|
|
16
|
+
"as-test": "^1.5.2",
|
|
16
17
|
"assemblyscript": "^0.28.17",
|
|
17
18
|
"assemblyscript-prettier": "^3.0.4",
|
|
18
19
|
"chartjs-node-canvas": "^5.0.0",
|
|
19
20
|
"chartjs-plugin-datalabels": "^2.2.0",
|
|
20
|
-
"eslint": "^10.
|
|
21
|
+
"eslint": "^10.4.0",
|
|
21
22
|
"husky": "^9.1.7",
|
|
22
23
|
"json-as": "./",
|
|
23
24
|
"prettier": "3.8.3",
|
|
24
25
|
"serve": "^14.2.6",
|
|
25
|
-
"tinybench": "^6.0.
|
|
26
|
-
"try-as": "^1.
|
|
26
|
+
"tinybench": "^6.0.2",
|
|
27
|
+
"try-as": "^1.1.2",
|
|
27
28
|
"typescript": "^6.0.3",
|
|
28
|
-
"typescript-eslint": "^8.
|
|
29
|
+
"typescript-eslint": "^8.60.0"
|
|
29
30
|
},
|
|
30
31
|
"bugs": {
|
|
31
32
|
"url": "https://github.com/JairusSW/json-as/issues"
|
|
@@ -85,13 +86,14 @@
|
|
|
85
86
|
},
|
|
86
87
|
"scripts": {
|
|
87
88
|
"ci": "act",
|
|
88
|
-
"test": "ast test --parallel",
|
|
89
|
-
"test:
|
|
90
|
-
"test:
|
|
89
|
+
"test": "ast test --parallel --enable try-as",
|
|
90
|
+
"test:rfc": "ast test --config rfc.config.json --parallel --enable try-as",
|
|
91
|
+
"test:transform": "node transform/__tests__/normalize-base-rel.test.mjs && node transform/__tests__/compute-base-rel.test.mjs && node transform/__tests__/resolve-imports.test.mjs",
|
|
92
|
+
"test:fast": "npm run build:transform && JSON_USE_FAST_PATH=1 ast test --parallel --mode swar,simd --enable try-as",
|
|
91
93
|
"fuzz": "ast fuzz",
|
|
92
94
|
"test:fuzz": "ast test --fuzz --parallel",
|
|
93
|
-
"test:ci": "ast test --parallel --clean",
|
|
94
|
-
"test:coverage": "ast test --enable coverage",
|
|
95
|
+
"test:ci": "ast test --parallel --clean --enable try-as",
|
|
96
|
+
"test:coverage": "ast test --enable coverage --enable try-as",
|
|
95
97
|
"bench": "bash -c 'bash ./scripts/run-bench.as.sh \"$@\" && { arg=\"${1:-}\"; if [ -z \"$arg\" ] || [ \"${arg#custom/}\" = \"$arg\" ]; then bash ./scripts/run-bench.js.sh \"$@\"; fi; } && bash ./scripts/build-charts.sh' --",
|
|
96
98
|
"bench:as": "bash ./scripts/run-bench.as.sh",
|
|
97
99
|
"bench:js": "bash ./scripts/run-bench.js.sh",
|
|
@@ -111,7 +113,6 @@
|
|
|
111
113
|
"lint:fix": "eslint . --fix --no-warn-ignored",
|
|
112
114
|
"commitmsg:verify": "bash ./scripts/commit-msg.sh",
|
|
113
115
|
"precommit:verify": "bash ./scripts/pre-commit.sh",
|
|
114
|
-
"prepush:verify": "bash ./scripts/pre-push.sh",
|
|
115
116
|
"typecheck": "tsc -p ./transform --noEmit",
|
|
116
117
|
"clean": "rm -rf build/ transform/lib/",
|
|
117
118
|
"prebuild": "npm run clean",
|
package/transform/lib/index.d.ts
CHANGED
|
@@ -3,6 +3,10 @@ import { Transform } from "assemblyscript/dist/transform.js";
|
|
|
3
3
|
import { Schema, SourceSet, Src } from "./types.js";
|
|
4
4
|
import { Visitor } from "./visitor.js";
|
|
5
5
|
export declare function normalizeJsonAsBaseRel(baseRel: string): string;
|
|
6
|
+
export declare function computeImportBaseRel(fromDir: string, packageDir: string, p?: {
|
|
7
|
+
relative(from: string, to: string): string;
|
|
8
|
+
sep: string;
|
|
9
|
+
}): string;
|
|
6
10
|
export declare class JSONTransform extends Visitor {
|
|
7
11
|
static SN: JSONTransform;
|
|
8
12
|
program: Program;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAOhB,eAAe,EAOf,MAAM,EACN,OAAO,EAEP,MAAM,EAIP,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAM7D,OAAO,EAA2B,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAE7E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAsCvC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAY9D;AAgND,qBAAa,aAAc,SAAQ,OAAO;IACxC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAuB;IAExC,OAAO,EAAG,OAAO,CAAC;IAClB,OAAO,EAAG,MAAM,CAAC;IACjB,MAAM,EAAG,MAAM,CAAC;IAChB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAA+B;IAC7D,MAAM,EAAG,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,CAAmB;IACrC,OAAO,EAAE,eAAe,EAAE,CAAM;IAChC,cAAc,EAAE,MAAM,EAAE,CAAM;IAE9B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAqB;IAEvD,OAAO,CAAC,4BAA4B;IA2DpC,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAiBtD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,cAAoB,GAAG,MAAM;IA4C3E,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAOhB,eAAe,EAOf,MAAM,EACN,OAAO,EAEP,MAAM,EAIP,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAM7D,OAAO,EAA2B,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAE7E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAsCvC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAY9D;AAsBD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,CAAC,GAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAS,GACpE,MAAM,CAIR;AAgND,qBAAa,aAAc,SAAQ,OAAO;IACxC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAuB;IAExC,OAAO,EAAG,OAAO,CAAC;IAClB,OAAO,EAAG,MAAM,CAAC;IACjB,MAAM,EAAG,MAAM,CAAC;IAChB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAA+B;IAC7D,MAAM,EAAG,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,CAAmB;IACrC,OAAO,EAAE,eAAe,EAAE,CAAM;IAChC,cAAc,EAAE,MAAM,EAAE,CAAM;IAE9B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAqB;IAEvD,OAAO,CAAC,4BAA4B;IA2DpC,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAiBtD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,cAAoB,GAAG,MAAM;IA4C3E,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAwkFnD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQtC,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IA8DlD,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAIjD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI/B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAyN9B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,OAAe,GAAG,MAAM,EAAE;IAuDxD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO;CA8C3D;AA8BD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS;IAChD,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BvD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAqEjC;AAqRD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO9C"}
|
package/transform/lib/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Node, Type, } from "assemblyscript/dist/assemblyscript.js";
|
|
2
2
|
import { Transform } from "assemblyscript/dist/transform.js";
|
|
3
|
-
import {
|
|
3
|
+
import { writeFileSync } from "fs";
|
|
4
4
|
import * as path from "path";
|
|
5
5
|
import { fileURLToPath } from "url";
|
|
6
6
|
import { CustomTransform } from "./linkers/custom.js";
|
|
@@ -32,6 +32,9 @@ export function normalizeJsonAsBaseRel(baseRel) {
|
|
|
32
32
|
}
|
|
33
33
|
return baseRel;
|
|
34
34
|
}
|
|
35
|
+
export function computeImportBaseRel(fromDir, packageDir, p = path) {
|
|
36
|
+
return normalizeJsonAsBaseRel(path.posix.join(...p.relative(fromDir, packageDir).split(p.sep)));
|
|
37
|
+
}
|
|
35
38
|
function envFlagDefaultTrue(value) {
|
|
36
39
|
if (!value)
|
|
37
40
|
return true;
|
|
@@ -937,9 +940,7 @@ export class JSONTransform extends Visitor {
|
|
|
937
940
|
const SIGNED_INTEGER_TYPES = ["i8", "i16", "i32", "i64", "isize"];
|
|
938
941
|
const FLOAT_TYPES = ["f32", "f64"];
|
|
939
942
|
const INTEGER_TYPES = [...UNSIGNED_INTEGER_TYPES, ...SIGNED_INTEGER_TYPES];
|
|
940
|
-
const STRING_FIELD_DESERIALIZER =
|
|
941
|
-
? "deserializeStringField_SIMD"
|
|
942
|
-
: "deserializeStringField_SWAR";
|
|
943
|
+
const STRING_FIELD_DESERIALIZER = "__deserializeStringField";
|
|
943
944
|
const getArrayValueType = (type) => {
|
|
944
945
|
if (!type.startsWith("Array<") && !type.startsWith("StaticArray<"))
|
|
945
946
|
return null;
|
|
@@ -953,8 +954,8 @@ export class JSONTransform extends Visitor {
|
|
|
953
954
|
const valuePtr = keyOffset ? `${srcPtr} + ${keyOffset}` : srcPtr;
|
|
954
955
|
if (INTEGER_TYPES.includes(resolvedType)) {
|
|
955
956
|
const helper = SIGNED_INTEGER_TYPES.includes(resolvedType)
|
|
956
|
-
? "
|
|
957
|
-
: "
|
|
957
|
+
? "__deserializeIntegerField"
|
|
958
|
+
: "__deserializeUnsignedField";
|
|
958
959
|
out.push(`${srcPtr} = ${helper}<${resolvedType}>(${valuePtr}, srcEnd, ${outPtr}, ${fieldOffset});`);
|
|
959
960
|
}
|
|
960
961
|
else if (["string", "String"].includes(resolvedType)) {
|
|
@@ -965,7 +966,7 @@ export class JSONTransform extends Visitor {
|
|
|
965
966
|
out.push(` ${srcPtr} = ${valuePtr} + 8;`);
|
|
966
967
|
out.push(" } else {");
|
|
967
968
|
}
|
|
968
|
-
out.push(` ${srcPtr} = ${STRING_FIELD_DESERIALIZER}<${member.type}>(${valuePtr}, srcEnd, ${outPtr}
|
|
969
|
+
out.push(` ${srcPtr} = ${STRING_FIELD_DESERIALIZER}<${member.type}>(${valuePtr}, srcEnd, ${outPtr}, ${fieldOffset});`);
|
|
969
970
|
if (member.node.type.isNullable) {
|
|
970
971
|
out.push(" }");
|
|
971
972
|
}
|
|
@@ -1083,7 +1084,7 @@ export class JSONTransform extends Visitor {
|
|
|
1083
1084
|
out.push("} else break;");
|
|
1084
1085
|
}
|
|
1085
1086
|
else if (FLOAT_TYPES.includes(resolvedType)) {
|
|
1086
|
-
out.push(`${srcPtr} =
|
|
1087
|
+
out.push(`${srcPtr} = __deserializeFloatField<${resolvedType}>(${valuePtr}, srcEnd, ${outPtr}, ${fieldOffset});`);
|
|
1087
1088
|
}
|
|
1088
1089
|
else if (resolvedSchema && !resolvedSchema.custom) {
|
|
1089
1090
|
if (fastPath) {
|
|
@@ -1135,6 +1136,10 @@ export class JSONTransform extends Visitor {
|
|
|
1135
1136
|
}
|
|
1136
1137
|
else if (resolvedType.startsWith("Array<")) {
|
|
1137
1138
|
const valueType = getArrayValueType(resolvedType);
|
|
1139
|
+
const rawInner = resolvedType
|
|
1140
|
+
.slice(resolvedType.indexOf("<") + 1, -1)
|
|
1141
|
+
.trim();
|
|
1142
|
+
const elementNullable = stripNull(rawInner) !== rawInner;
|
|
1138
1143
|
out.push("{");
|
|
1139
1144
|
if (member.node.type.isNullable) {
|
|
1140
1145
|
out.push(` if (load<u64>(${valuePtr}) == 30399761348886638) {`);
|
|
@@ -1151,13 +1156,27 @@ export class JSONTransform extends Visitor {
|
|
|
1151
1156
|
out.push(" }");
|
|
1152
1157
|
out.push(" let index = 0;");
|
|
1153
1158
|
out.push(` ${srcPtr} = ${valuePtr} + 2;`);
|
|
1159
|
+
out.push(` ${srcPtr} = JSON.Util.skipWhitespace(${srcPtr}, srcEnd);`);
|
|
1154
1160
|
out.push(` if (load<u16>(${srcPtr}) == 0x5d) {`);
|
|
1155
1161
|
out.push(" value.length = 0;");
|
|
1156
1162
|
out.push(` ${srcPtr} += 2;`);
|
|
1157
1163
|
out.push(" } else while (true) {");
|
|
1158
|
-
out.push(
|
|
1159
|
-
|
|
1164
|
+
out.push(` ${srcPtr} = JSON.Util.skipWhitespace(${srcPtr}, srcEnd);`);
|
|
1165
|
+
if (elementNullable) {
|
|
1166
|
+
out.push(` if (index >= value.length) value.push(changetype<${valueType} | null>(0));`);
|
|
1167
|
+
out.push(` if (load<u64>(${srcPtr}) == 30399761348886638) {`);
|
|
1168
|
+
out.push(` store<usize>(value.dataStart + ((<usize>index) << alignof<${valueType}>()), 0);`);
|
|
1169
|
+
out.push(` ${srcPtr} += 8;`);
|
|
1170
|
+
out.push(" } else {");
|
|
1171
|
+
out.push(` ${srcPtr} = ${STRING_FIELD_DESERIALIZER}<${valueType}>(${srcPtr}, srcEnd, value.dataStart + ((<usize>index) << alignof<${valueType}>()));`);
|
|
1172
|
+
out.push(" }");
|
|
1173
|
+
}
|
|
1174
|
+
else {
|
|
1175
|
+
out.push(' if (index >= value.length) value.push("");');
|
|
1176
|
+
out.push(` ${srcPtr} = ${STRING_FIELD_DESERIALIZER}<${valueType}>(${srcPtr}, srcEnd, value.dataStart + ((<usize>index) << alignof<${valueType}>()));`);
|
|
1177
|
+
}
|
|
1160
1178
|
out.push(" index++;");
|
|
1179
|
+
out.push(` ${srcPtr} = JSON.Util.skipWhitespace(${srcPtr}, srcEnd);`);
|
|
1161
1180
|
out.push(` const code = load<u16>(${srcPtr});`);
|
|
1162
1181
|
out.push(" if (code == 0x2c) {");
|
|
1163
1182
|
out.push(` ${srcPtr} += 2;`);
|
|
@@ -1186,6 +1205,7 @@ export class JSONTransform extends Visitor {
|
|
|
1186
1205
|
out.push(" }");
|
|
1187
1206
|
out.push(" let index = 0;");
|
|
1188
1207
|
out.push(` ${srcPtr} = ${valuePtr} + 2;`);
|
|
1208
|
+
out.push(` ${srcPtr} = JSON.Util.skipWhitespace(${srcPtr}, srcEnd);`);
|
|
1189
1209
|
out.push(` if (load<u16>(${srcPtr}) == 0x5d) {`);
|
|
1190
1210
|
out.push(" value.length = 0;");
|
|
1191
1211
|
out.push(` ${srcPtr} += 2;`);
|
|
@@ -1204,6 +1224,7 @@ export class JSONTransform extends Visitor {
|
|
|
1204
1224
|
out.push(` ${srcPtr} = changetype<nonnull<${valueType}>>(item).__DESERIALIZE_FAST<${valueType}>(${srcPtr}, srcEnd, item);`);
|
|
1205
1225
|
out.push(` if (!${srcPtr}) break;`);
|
|
1206
1226
|
out.push(" index++;");
|
|
1227
|
+
out.push(` ${srcPtr} = JSON.Util.skipWhitespace(${srcPtr}, srcEnd);`);
|
|
1207
1228
|
out.push(` const code = load<u16>(${srcPtr});`);
|
|
1208
1229
|
out.push(" if (code == 0x2c) {");
|
|
1209
1230
|
out.push(` ${srcPtr} += 2;`);
|
|
@@ -1222,63 +1243,23 @@ export class JSONTransform extends Visitor {
|
|
|
1222
1243
|
out.push("}");
|
|
1223
1244
|
return out;
|
|
1224
1245
|
}
|
|
1225
|
-
out.push(`
|
|
1226
|
-
out.push(` if (
|
|
1227
|
-
out.push(` value = changetype<${resolvedType}>(instantiate<nonnull<${resolvedType}>>());`);
|
|
1228
|
-
out.push(` store<${resolvedType}>(${outPtr}, value, ${fieldOffset});`);
|
|
1229
|
-
out.push(" }");
|
|
1230
|
-
out.push(` if (load<u16>(${valuePtr}) == 0x5b && load<u16>(${valuePtr}, 2) == 0x5d) {`);
|
|
1231
|
-
out.push(" value.length = 0;");
|
|
1232
|
-
out.push(` ${srcPtr} = ${valuePtr} + 4;`);
|
|
1233
|
-
out.push(" } else {");
|
|
1234
|
-
out.push(` ${srcPtr} = deserializeArrayInto_SWAR<${resolvedType}>(${valuePtr}, srcEnd, value);`);
|
|
1235
|
-
out.push(` if (!${srcPtr}) break;`);
|
|
1236
|
-
out.push(" }");
|
|
1246
|
+
out.push(` ${srcPtr} = __deserializeArrayField_SWAR<${resolvedType}>(${valuePtr}, srcEnd, ${outPtr}, ${fieldOffset});`);
|
|
1247
|
+
out.push(` if (!${srcPtr}) break;`);
|
|
1237
1248
|
if (member.node.type.isNullable) {
|
|
1238
1249
|
out.push(" }");
|
|
1239
1250
|
}
|
|
1240
1251
|
out.push("}");
|
|
1241
1252
|
}
|
|
1242
1253
|
else if (resolvedType.startsWith("Map<")) {
|
|
1243
|
-
|
|
1244
|
-
out.push(`${srcPtr} = deserializeMapField<${resolvedType}>(${srcPtr}, srcEnd, ${outPtr}, ${fieldOffset});`);
|
|
1245
|
-
}
|
|
1246
|
-
else if (fastPath) {
|
|
1247
|
-
out.push("{");
|
|
1248
|
-
out.push(` let value = load<${resolvedType}>(${outPtr}, ${fieldOffset});`);
|
|
1249
|
-
out.push(" if (changetype<usize>(value) == 0) {");
|
|
1250
|
-
out.push(` value = new ${resolvedType}();`);
|
|
1251
|
-
out.push(` store<${resolvedType}>(${outPtr}, value, ${fieldOffset});`);
|
|
1252
|
-
out.push(" }");
|
|
1253
|
-
out.push(` ${srcPtr} = deserializeMapInto<${resolvedType}>(${srcPtr}, srcEnd, value);`);
|
|
1254
|
-
out.push("}");
|
|
1255
|
-
}
|
|
1256
|
-
else {
|
|
1257
|
-
out.push(`${srcPtr} = deserializeMapInto<${resolvedType}>(${srcPtr}, srcEnd, load<${resolvedType}>(${outPtr}, ${fieldOffset}));`);
|
|
1258
|
-
}
|
|
1254
|
+
out.push(`${srcPtr} = __deserializeMapField<${resolvedType}>(${srcPtr}, srcEnd, ${outPtr}, ${fieldOffset});`);
|
|
1259
1255
|
out.push(`if (!${srcPtr}) break;`);
|
|
1260
1256
|
}
|
|
1261
1257
|
else if (resolvedType.startsWith("Set<")) {
|
|
1262
|
-
|
|
1263
|
-
out.push(`${srcPtr} = deserializeSetField<${resolvedType}>(${srcPtr}, srcEnd, ${outPtr}, ${fieldOffset});`);
|
|
1264
|
-
}
|
|
1265
|
-
else if (fastPath) {
|
|
1266
|
-
out.push("{");
|
|
1267
|
-
out.push(` let value = load<${resolvedType}>(${outPtr}, ${fieldOffset});`);
|
|
1268
|
-
out.push(" if (changetype<usize>(value) == 0) {");
|
|
1269
|
-
out.push(` value = new ${resolvedType}();`);
|
|
1270
|
-
out.push(` store<${resolvedType}>(${outPtr}, value, ${fieldOffset});`);
|
|
1271
|
-
out.push(" }");
|
|
1272
|
-
out.push(` ${srcPtr} = deserializeSetInto<${resolvedType}>(${srcPtr}, srcEnd, value);`);
|
|
1273
|
-
out.push("}");
|
|
1274
|
-
}
|
|
1275
|
-
else {
|
|
1276
|
-
out.push(`${srcPtr} = deserializeSetInto<${resolvedType}>(${srcPtr}, srcEnd, load<${resolvedType}>(${outPtr}, ${fieldOffset}));`);
|
|
1277
|
-
}
|
|
1258
|
+
out.push(`${srcPtr} = __deserializeSetField<${resolvedType}>(${srcPtr}, srcEnd, ${outPtr}, ${fieldOffset});`);
|
|
1278
1259
|
out.push(`if (!${srcPtr}) break;`);
|
|
1279
1260
|
}
|
|
1280
1261
|
else if (resolvedType.startsWith("StaticArray<")) {
|
|
1281
|
-
out.push(`${srcPtr} =
|
|
1262
|
+
out.push(`${srcPtr} = __deserializeStaticArrayField<${resolvedType}>(${srcPtr}, srcEnd, ${outPtr}, ${fieldOffset});`);
|
|
1282
1263
|
out.push(`if (!${srcPtr}) break;`);
|
|
1283
1264
|
}
|
|
1284
1265
|
else if (resolvedType == "JSON.Value" ||
|
|
@@ -1337,6 +1318,9 @@ export class JSONTransform extends Visitor {
|
|
|
1337
1318
|
indent += " ";
|
|
1338
1319
|
if (!inlineStringValue)
|
|
1339
1320
|
DESERIALIZE_FAST += indent + `srcStart += ${firstKeyOffset};\n`;
|
|
1321
|
+
DESERIALIZE_FAST +=
|
|
1322
|
+
indent +
|
|
1323
|
+
`if (JSON.Util.isSpace(load<u16>(${inlineStringValue ? `srcStart + ${firstKeyOffset}` : "srcStart"}))) break;\n`;
|
|
1340
1324
|
DESERIALIZE_FAST +=
|
|
1341
1325
|
indent + deserializerFirst.join("\n" + indent) + "\n";
|
|
1342
1326
|
DESERIALIZE_FAST += indent + "seenAny = true;\n";
|
|
@@ -1360,6 +1344,9 @@ export class JSONTransform extends Visitor {
|
|
|
1360
1344
|
indent += " ";
|
|
1361
1345
|
if (!inlineStringValue)
|
|
1362
1346
|
DESERIALIZE_FAST += indent + `srcStart += ${nextKeyOffset};\n`;
|
|
1347
|
+
DESERIALIZE_FAST +=
|
|
1348
|
+
indent +
|
|
1349
|
+
`if (JSON.Util.isSpace(load<u16>(${inlineStringValue ? `srcStart + ${nextKeyOffset}` : "srcStart"}))) break;\n`;
|
|
1363
1350
|
DESERIALIZE_FAST +=
|
|
1364
1351
|
indent + deserializerNext.join("\n" + indent) + "\n";
|
|
1365
1352
|
indent = indent.slice(0, -2);
|
|
@@ -1389,6 +1376,9 @@ export class JSONTransform extends Visitor {
|
|
|
1389
1376
|
DESERIALIZE_FAST += indent + "break;\n\n";
|
|
1390
1377
|
continue;
|
|
1391
1378
|
}
|
|
1379
|
+
DESERIALIZE_FAST +=
|
|
1380
|
+
indent +
|
|
1381
|
+
`if (JSON.Util.isSpace(load<u16>(${inlineStringValue ? `srcStart + ${keyOffset}` : "srcStart"}))) break;\n`;
|
|
1392
1382
|
DESERIALIZE_FAST += indent + deserializer.join("\n" + indent) + "\n\n";
|
|
1393
1383
|
}
|
|
1394
1384
|
}
|
|
@@ -1398,6 +1388,98 @@ export class JSONTransform extends Visitor {
|
|
|
1398
1388
|
DESERIALIZE_FAST += indent + "return srcStart;\n";
|
|
1399
1389
|
indent = indent.slice(0, -2);
|
|
1400
1390
|
DESERIALIZE_FAST += indent + "} while (false);\n\n";
|
|
1391
|
+
const tier2Desers = this.schema.members.map((member) => getDeserializer(member.type, "srcStart", "dst", member, 0, true));
|
|
1392
|
+
const tier2Ok = tier2Desers.every((d) => d.length && !(d.length === 1 && d[0].trim() === "break;"));
|
|
1393
|
+
if (tier2Ok && !supportsFastOptionalPath) {
|
|
1394
|
+
const i1 = " ";
|
|
1395
|
+
const i2 = " ";
|
|
1396
|
+
const skip = i2 + "srcStart = JSON.Util.skipWhitespace(srcStart, srcEnd);\n";
|
|
1397
|
+
DESERIALIZE_FAST += i1 + "srcStart = start;\n";
|
|
1398
|
+
DESERIALIZE_FAST += i1 + "do {\n";
|
|
1399
|
+
DESERIALIZE_FAST += skip;
|
|
1400
|
+
DESERIALIZE_FAST += i2 + "if (load<u16>(srcStart) != 0x7b) break; // {\n";
|
|
1401
|
+
DESERIALIZE_FAST += i2 + "srcStart += 2;\n";
|
|
1402
|
+
for (let i = 0; i < this.schema.members.length; i++) {
|
|
1403
|
+
const member = this.schema.members[i];
|
|
1404
|
+
const key = JSON.stringify(member.alias || member.name);
|
|
1405
|
+
const keyBytes = key.length << 1;
|
|
1406
|
+
DESERIALIZE_FAST += "\n";
|
|
1407
|
+
DESERIALIZE_FAST += skip;
|
|
1408
|
+
DESERIALIZE_FAST +=
|
|
1409
|
+
i2 +
|
|
1410
|
+
`if ( // ${key}\n${i2} ` +
|
|
1411
|
+
getComparisions(key, "srcStart", "!=").join("\n" + i2 + " || ") +
|
|
1412
|
+
`\n${i2}) break;\n`;
|
|
1413
|
+
DESERIALIZE_FAST += i2 + `srcStart += ${keyBytes};\n`;
|
|
1414
|
+
DESERIALIZE_FAST += skip;
|
|
1415
|
+
DESERIALIZE_FAST +=
|
|
1416
|
+
i2 + "if (load<u16>(srcStart) != 0x3a) break; // :\n";
|
|
1417
|
+
DESERIALIZE_FAST += i2 + "srcStart += 2;\n";
|
|
1418
|
+
DESERIALIZE_FAST += skip;
|
|
1419
|
+
DESERIALIZE_FAST += i2 + tier2Desers[i].join("\n" + i2) + "\n";
|
|
1420
|
+
if (i < this.schema.members.length - 1) {
|
|
1421
|
+
DESERIALIZE_FAST += skip;
|
|
1422
|
+
DESERIALIZE_FAST +=
|
|
1423
|
+
i2 + "if (load<u16>(srcStart) != 0x2c) break; // ,\n";
|
|
1424
|
+
DESERIALIZE_FAST += i2 + "srcStart += 2;\n";
|
|
1425
|
+
}
|
|
1426
|
+
}
|
|
1427
|
+
DESERIALIZE_FAST += "\n";
|
|
1428
|
+
DESERIALIZE_FAST += skip;
|
|
1429
|
+
DESERIALIZE_FAST += i2 + "if (load<u16>(srcStart) != 0x7d) break; // }\n";
|
|
1430
|
+
DESERIALIZE_FAST += i2 + "srcStart += 2;\n";
|
|
1431
|
+
DESERIALIZE_FAST += i2 + "return srcStart;\n";
|
|
1432
|
+
DESERIALIZE_FAST += i1 + "} while (false);\n\n";
|
|
1433
|
+
}
|
|
1434
|
+
else if (tier2Ok && supportsFastOptionalPath) {
|
|
1435
|
+
const multi = this.schema.members.length > 1;
|
|
1436
|
+
const i1 = " ";
|
|
1437
|
+
const i2 = " ";
|
|
1438
|
+
const i3 = " ";
|
|
1439
|
+
DESERIALIZE_FAST += i1 + "srcStart = start;\n";
|
|
1440
|
+
DESERIALIZE_FAST += i1 + "do {\n";
|
|
1441
|
+
DESERIALIZE_FAST +=
|
|
1442
|
+
i2 + "srcStart = JSON.Util.skipWhitespace(srcStart, srcEnd);\n";
|
|
1443
|
+
DESERIALIZE_FAST += i2 + "if (load<u16>(srcStart) != 0x7b) break; // {\n";
|
|
1444
|
+
DESERIALIZE_FAST += i2 + "srcStart += 2;\n";
|
|
1445
|
+
DESERIALIZE_FAST += i2 + "let kp: usize = 0;\n";
|
|
1446
|
+
if (multi)
|
|
1447
|
+
DESERIALIZE_FAST += i2 + "let seenAny = false;\n";
|
|
1448
|
+
for (let i = 0; i < this.schema.members.length; i++) {
|
|
1449
|
+
const member = this.schema.members[i];
|
|
1450
|
+
const key = JSON.stringify(member.alias || member.name);
|
|
1451
|
+
const keyBytes = key.length << 1;
|
|
1452
|
+
DESERIALIZE_FAST += "\n";
|
|
1453
|
+
DESERIALIZE_FAST +=
|
|
1454
|
+
i2 + "kp = JSON.Util.skipWhitespace(srcStart, srcEnd);\n";
|
|
1455
|
+
if (multi && i > 0) {
|
|
1456
|
+
DESERIALIZE_FAST +=
|
|
1457
|
+
i2 +
|
|
1458
|
+
"if (seenAny && load<u16>(kp) == 0x2c) kp = JSON.Util.skipWhitespace(kp + 2, srcEnd);\n";
|
|
1459
|
+
}
|
|
1460
|
+
DESERIALIZE_FAST +=
|
|
1461
|
+
i2 +
|
|
1462
|
+
`if ( // ${key}\n${i2} ` +
|
|
1463
|
+
getComparisions(key, "kp", "==").join("\n" + i2 + " && ") +
|
|
1464
|
+
`\n${i2}) {\n`;
|
|
1465
|
+
DESERIALIZE_FAST += i3 + `kp += ${keyBytes};\n`;
|
|
1466
|
+
DESERIALIZE_FAST += i3 + "kp = JSON.Util.skipWhitespace(kp, srcEnd);\n";
|
|
1467
|
+
DESERIALIZE_FAST += i3 + "if (load<u16>(kp) != 0x3a) break; // :\n";
|
|
1468
|
+
DESERIALIZE_FAST +=
|
|
1469
|
+
i3 + "srcStart = JSON.Util.skipWhitespace(kp + 2, srcEnd);\n";
|
|
1470
|
+
DESERIALIZE_FAST += i3 + tier2Desers[i].join("\n" + i3) + "\n";
|
|
1471
|
+
if (multi)
|
|
1472
|
+
DESERIALIZE_FAST += i3 + "seenAny = true;\n";
|
|
1473
|
+
DESERIALIZE_FAST += i2 + "}\n";
|
|
1474
|
+
}
|
|
1475
|
+
DESERIALIZE_FAST += "\n";
|
|
1476
|
+
DESERIALIZE_FAST +=
|
|
1477
|
+
i2 + "srcStart = JSON.Util.skipWhitespace(srcStart, srcEnd);\n";
|
|
1478
|
+
DESERIALIZE_FAST += i2 + "if (load<u16>(srcStart) != 0x7d) break; // }\n";
|
|
1479
|
+
DESERIALIZE_FAST += i2 + "srcStart += 2;\n";
|
|
1480
|
+
DESERIALIZE_FAST += i2 + "return srcStart;\n";
|
|
1481
|
+
DESERIALIZE_FAST += i1 + "} while (false);\n\n";
|
|
1482
|
+
}
|
|
1401
1483
|
if (THROW_FAST_PATH) {
|
|
1402
1484
|
DESERIALIZE_FAST +=
|
|
1403
1485
|
indent + "const failAt = srcStart ? srcStart : start;\n";
|
|
@@ -1462,6 +1544,10 @@ export class JSONTransform extends Visitor {
|
|
|
1462
1544
|
DESERIALIZE += indent + " lastIndex = srcStart + 2;\n";
|
|
1463
1545
|
DESERIALIZE += indent + " }\n";
|
|
1464
1546
|
DESERIALIZE += indent + " }\n";
|
|
1547
|
+
if (STRICT)
|
|
1548
|
+
DESERIALIZE +=
|
|
1549
|
+
indent +
|
|
1550
|
+
' else if (!isKey && code != 44 && code != 125) throw new Error("Expected \'\\"\' to start key in JSON object at position " + (srcEnd - srcStart).toString());\n';
|
|
1465
1551
|
DESERIALIZE += indent + " srcStart += 2;\n";
|
|
1466
1552
|
DESERIALIZE += indent + " } else {\n";
|
|
1467
1553
|
const groupMembers = (members) => {
|
|
@@ -2294,48 +2380,11 @@ export class JSONTransform extends Visitor {
|
|
|
2294
2380
|
const bsImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "bs" || d.name.text == "bs"));
|
|
2295
2381
|
const jsonImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "JSON" || d.name.text == "JSON"));
|
|
2296
2382
|
const atoiImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "atoi" || d.name.text == "atoi"));
|
|
2297
|
-
const deserializeIntegerFieldImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "deserializeIntegerField" ||
|
|
2298
|
-
d.name.text == "deserializeIntegerField"));
|
|
2299
|
-
const deserializeUnsignedFieldImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "deserializeUnsignedField" ||
|
|
2300
|
-
d.name.text == "deserializeUnsignedField"));
|
|
2301
|
-
const deserializeFloatFieldImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "deserializeFloatField" ||
|
|
2302
|
-
d.name.text == "deserializeFloatField"));
|
|
2303
2383
|
const scanValueEndImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "scanValueEnd" || d.name.text == "scanValueEnd"));
|
|
2304
|
-
const
|
|
2305
|
-
|
|
2306
|
-
const deserializeArrayInto_SWARImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "deserializeArrayInto_SWAR" ||
|
|
2307
|
-
d.name.text == "deserializeArrayInto_SWAR"));
|
|
2308
|
-
const deserializeMapFieldImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "deserializeMapField" ||
|
|
2309
|
-
d.name.text == "deserializeMapField"));
|
|
2310
|
-
const deserializeMapIntoImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "deserializeMapInto" ||
|
|
2311
|
-
d.name.text == "deserializeMapInto"));
|
|
2312
|
-
const deserializeSetFieldImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "deserializeSetField" ||
|
|
2313
|
-
d.name.text == "deserializeSetField"));
|
|
2314
|
-
const deserializeSetIntoImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "deserializeSetInto" ||
|
|
2315
|
-
d.name.text == "deserializeSetInto"));
|
|
2316
|
-
const deserializeStaticArrayFieldImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "deserializeStaticArrayField" ||
|
|
2317
|
-
d.name.text == "deserializeStaticArrayField"));
|
|
2318
|
-
const deserializeStringFieldSWARImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "deserializeStringField_SWAR" ||
|
|
2319
|
-
d.name.text == "deserializeStringField_SWAR"));
|
|
2320
|
-
const deserializeStringFieldSIMDImport = this.imports.find((i) => i.declarations?.find((d) => d.foreignName.text == "deserializeStringField_SIMD" ||
|
|
2321
|
-
d.name.text == "deserializeStringField_SIMD"));
|
|
2322
|
-
const sourceText = readFileSync(fromPath).toString();
|
|
2323
|
-
const hasLocalDeserializeIntegerField = /\bdeserializeIntegerField\b/.test(sourceText);
|
|
2324
|
-
const hasLocalDeserializeUnsignedField = /\bdeserializeUnsignedField\b/.test(sourceText);
|
|
2325
|
-
const hasLocalDeserializeFloatField = /\bdeserializeFloatField\b/.test(sourceText);
|
|
2384
|
+
const fieldHelpersImport = this.imports.find((i) => i.declarations?.find((d) => d.name.text == "__deserializeStringField"));
|
|
2385
|
+
const sourceText = node.text;
|
|
2326
2386
|
const hasLocalScanValueEnd = /\bscanValueEnd\b/.test(sourceText);
|
|
2327
|
-
const
|
|
2328
|
-
const hasLocaldeserializeArrayInto_SWAR = /\bdeserializeArrayInto_SWAR\b/.test(sourceText);
|
|
2329
|
-
const hasLocaldeserializeMapField = /\bdeserializeMapField\b/.test(sourceText);
|
|
2330
|
-
const hasLocaldeserializeMapInto = /\bdeserializeMapInto\b/.test(sourceText);
|
|
2331
|
-
const hasLocaldeserializeSetField = /\bdeserializeSetField\b/.test(sourceText);
|
|
2332
|
-
const hasLocaldeserializeSetInto = /\bdeserializeSetInto\b/.test(sourceText);
|
|
2333
|
-
const hasLocaldeserializeStaticArrayField = /\bdeserializeStaticArrayField\b/.test(sourceText);
|
|
2334
|
-
const hasLocalDeserializeStringFieldSWAR = /\bdeserializeStringField_SWAR\b/.test(sourceText);
|
|
2335
|
-
const hasLocalDeserializeStringFieldSIMD = /\bdeserializeStringField_SIMD\b/.test(sourceText);
|
|
2336
|
-
const baseRel = normalizeJsonAsBaseRel(path.posix.join(...path
|
|
2337
|
-
.relative(path.dirname(fromPath), path.join(baseDir))
|
|
2338
|
-
.split(path.sep)));
|
|
2387
|
+
const baseRel = computeImportBaseRel(path.dirname(fromPath), path.join(baseDir));
|
|
2339
2388
|
if (!bsImport) {
|
|
2340
2389
|
const replaceNode = Node.createImportStatement([
|
|
2341
2390
|
Node.createImportDeclaration(Node.createIdentifierExpression("bs", node.range, false), null, node.range),
|
|
@@ -2372,42 +2421,6 @@ export class JSONTransform extends Visitor {
|
|
|
2372
2421
|
node.range.source.normalizedPath +
|
|
2373
2422
|
"\n");
|
|
2374
2423
|
}
|
|
2375
|
-
if (!deserializeIntegerFieldImport && !hasLocalDeserializeIntegerField) {
|
|
2376
|
-
const replaceNode = Node.createImportStatement([
|
|
2377
|
-
Node.createImportDeclaration(Node.createIdentifierExpression("deserializeIntegerField", node.range, false), null, node.range),
|
|
2378
|
-
], Node.createStringLiteralExpression(path.posix.join(baseRel, "assembly", "deserialize", "index", "integer"), node.range), node.range);
|
|
2379
|
-
node.range.source.statements.unshift(replaceNode);
|
|
2380
|
-
if (DEBUG > 0)
|
|
2381
|
-
console.log("Added import: " +
|
|
2382
|
-
toString(replaceNode) +
|
|
2383
|
-
" to " +
|
|
2384
|
-
node.range.source.normalizedPath +
|
|
2385
|
-
"\n");
|
|
2386
|
-
}
|
|
2387
|
-
if (!deserializeUnsignedFieldImport && !hasLocalDeserializeUnsignedField) {
|
|
2388
|
-
const replaceNode = Node.createImportStatement([
|
|
2389
|
-
Node.createImportDeclaration(Node.createIdentifierExpression("deserializeUnsignedField", node.range, false), null, node.range),
|
|
2390
|
-
], Node.createStringLiteralExpression(path.posix.join(baseRel, "assembly", "deserialize", "index", "unsigned"), node.range), node.range);
|
|
2391
|
-
node.range.source.statements.unshift(replaceNode);
|
|
2392
|
-
if (DEBUG > 0)
|
|
2393
|
-
console.log("Added import: " +
|
|
2394
|
-
toString(replaceNode) +
|
|
2395
|
-
" to " +
|
|
2396
|
-
node.range.source.normalizedPath +
|
|
2397
|
-
"\n");
|
|
2398
|
-
}
|
|
2399
|
-
if (!deserializeFloatFieldImport && !hasLocalDeserializeFloatField) {
|
|
2400
|
-
const replaceNode = Node.createImportStatement([
|
|
2401
|
-
Node.createImportDeclaration(Node.createIdentifierExpression("deserializeFloatField", node.range, false), null, node.range),
|
|
2402
|
-
], Node.createStringLiteralExpression(path.posix.join(baseRel, "assembly", "deserialize", "simple", "float"), node.range), node.range);
|
|
2403
|
-
node.range.source.statements.unshift(replaceNode);
|
|
2404
|
-
if (DEBUG > 0)
|
|
2405
|
-
console.log("Added import: " +
|
|
2406
|
-
toString(replaceNode) +
|
|
2407
|
-
" to " +
|
|
2408
|
-
node.range.source.normalizedPath +
|
|
2409
|
-
"\n");
|
|
2410
|
-
}
|
|
2411
2424
|
if (!scanValueEndImport && !hasLocalScanValueEnd) {
|
|
2412
2425
|
const replaceNode = Node.createImportStatement([
|
|
2413
2426
|
Node.createImportDeclaration(Node.createIdentifierExpression("scanValueEnd", node.range, false), null, node.range),
|
|
@@ -2420,114 +2433,18 @@ export class JSONTransform extends Visitor {
|
|
|
2420
2433
|
node.range.source.normalizedPath +
|
|
2421
2434
|
"\n");
|
|
2422
2435
|
}
|
|
2423
|
-
if (!
|
|
2424
|
-
|
|
2425
|
-
const replaceNode = Node.createImportStatement([
|
|
2426
|
-
Node.createImportDeclaration(Node.createIdentifierExpression("deserializeArrayField_SWAR", node.range, false), null, node.range),
|
|
2427
|
-
], Node.createStringLiteralExpression(path.posix.join(baseRel, "assembly", "deserialize", "simple", "array"), node.range), node.range);
|
|
2428
|
-
node.range.source.statements.unshift(replaceNode);
|
|
2429
|
-
if (DEBUG > 0)
|
|
2430
|
-
console.log("Added import: " +
|
|
2431
|
-
toString(replaceNode) +
|
|
2432
|
-
" to " +
|
|
2433
|
-
node.range.source.normalizedPath +
|
|
2434
|
-
"\n");
|
|
2435
|
-
}
|
|
2436
|
-
if (!deserializeArrayInto_SWARImport &&
|
|
2437
|
-
!hasLocaldeserializeArrayInto_SWAR) {
|
|
2438
|
-
const replaceNode = Node.createImportStatement([
|
|
2439
|
-
Node.createImportDeclaration(Node.createIdentifierExpression("deserializeArrayInto_SWAR", node.range, false), null, node.range),
|
|
2440
|
-
], Node.createStringLiteralExpression(path.posix.join(baseRel, "assembly", "deserialize", "swar", "array"), node.range), node.range);
|
|
2441
|
-
node.range.source.statements.unshift(replaceNode);
|
|
2442
|
-
if (DEBUG > 0)
|
|
2443
|
-
console.log("Added import: " +
|
|
2444
|
-
toString(replaceNode) +
|
|
2445
|
-
" to " +
|
|
2446
|
-
node.range.source.normalizedPath +
|
|
2447
|
-
"\n");
|
|
2448
|
-
}
|
|
2449
|
-
if (!deserializeMapFieldImport && !hasLocaldeserializeMapField) {
|
|
2450
|
-
const replaceNode = Node.createImportStatement([
|
|
2451
|
-
Node.createImportDeclaration(Node.createIdentifierExpression("deserializeMapField", node.range, false), null, node.range),
|
|
2452
|
-
], Node.createStringLiteralExpression(path.posix.join(baseRel, "assembly", "deserialize", "simple", "map"), node.range), node.range);
|
|
2453
|
-
node.range.source.statements.unshift(replaceNode);
|
|
2454
|
-
if (DEBUG > 0)
|
|
2455
|
-
console.log("Added import: " +
|
|
2456
|
-
toString(replaceNode) +
|
|
2457
|
-
" to " +
|
|
2458
|
-
node.range.source.normalizedPath +
|
|
2459
|
-
"\n");
|
|
2460
|
-
}
|
|
2461
|
-
if (!deserializeMapIntoImport && !hasLocaldeserializeMapInto) {
|
|
2462
|
-
const replaceNode = Node.createImportStatement([
|
|
2463
|
-
Node.createImportDeclaration(Node.createIdentifierExpression("deserializeMapInto", node.range, false), null, node.range),
|
|
2464
|
-
], Node.createStringLiteralExpression(path.posix.join(baseRel, "assembly", "deserialize", "simple", "map"), node.range), node.range);
|
|
2465
|
-
node.range.source.statements.unshift(replaceNode);
|
|
2466
|
-
if (DEBUG > 0)
|
|
2467
|
-
console.log("Added import: " +
|
|
2468
|
-
toString(replaceNode) +
|
|
2469
|
-
" to " +
|
|
2470
|
-
node.range.source.normalizedPath +
|
|
2471
|
-
"\n");
|
|
2472
|
-
}
|
|
2473
|
-
if (!deserializeSetFieldImport && !hasLocaldeserializeSetField) {
|
|
2474
|
-
const replaceNode = Node.createImportStatement([
|
|
2475
|
-
Node.createImportDeclaration(Node.createIdentifierExpression("deserializeSetField", node.range, false), null, node.range),
|
|
2476
|
-
], Node.createStringLiteralExpression(path.posix.join(baseRel, "assembly", "deserialize", "simple", "set"), node.range), node.range);
|
|
2477
|
-
node.range.source.statements.unshift(replaceNode);
|
|
2478
|
-
if (DEBUG > 0)
|
|
2479
|
-
console.log("Added import: " +
|
|
2480
|
-
toString(replaceNode) +
|
|
2481
|
-
" to " +
|
|
2482
|
-
node.range.source.normalizedPath +
|
|
2483
|
-
"\n");
|
|
2484
|
-
}
|
|
2485
|
-
if (!deserializeSetIntoImport && !hasLocaldeserializeSetInto) {
|
|
2486
|
-
const replaceNode = Node.createImportStatement([
|
|
2487
|
-
Node.createImportDeclaration(Node.createIdentifierExpression("deserializeSetInto", node.range, false), null, node.range),
|
|
2488
|
-
], Node.createStringLiteralExpression(path.posix.join(baseRel, "assembly", "deserialize", "simple", "set"), node.range), node.range);
|
|
2489
|
-
node.range.source.statements.unshift(replaceNode);
|
|
2490
|
-
if (DEBUG > 0)
|
|
2491
|
-
console.log("Added import: " +
|
|
2492
|
-
toString(replaceNode) +
|
|
2493
|
-
" to " +
|
|
2494
|
-
node.range.source.normalizedPath +
|
|
2495
|
-
"\n");
|
|
2496
|
-
}
|
|
2497
|
-
if (!deserializeStaticArrayFieldImport &&
|
|
2498
|
-
!hasLocaldeserializeStaticArrayField) {
|
|
2499
|
-
const replaceNode = Node.createImportStatement([
|
|
2500
|
-
Node.createImportDeclaration(Node.createIdentifierExpression("deserializeStaticArrayField", node.range, false), null, node.range),
|
|
2501
|
-
], Node.createStringLiteralExpression(path.posix.join(baseRel, "assembly", "deserialize", "simple", "staticarray"), node.range), node.range);
|
|
2502
|
-
node.range.source.statements.unshift(replaceNode);
|
|
2503
|
-
if (DEBUG > 0)
|
|
2504
|
-
console.log("Added import: " +
|
|
2505
|
-
toString(replaceNode) +
|
|
2506
|
-
" to " +
|
|
2507
|
-
node.range.source.normalizedPath +
|
|
2508
|
-
"\n");
|
|
2509
|
-
}
|
|
2510
|
-
const codegenMode = getCodegenMode(this.program);
|
|
2511
|
-
if (codegenMode !== JSONMode.SIMD &&
|
|
2512
|
-
!deserializeStringFieldSWARImport &&
|
|
2513
|
-
!hasLocalDeserializeStringFieldSWAR) {
|
|
2514
|
-
const replaceNode = Node.createImportStatement([
|
|
2515
|
-
Node.createImportDeclaration(Node.createIdentifierExpression("deserializeStringField_SWAR", node.range, false), null, node.range),
|
|
2516
|
-
], Node.createStringLiteralExpression(path.posix.join(baseRel, "assembly", "deserialize", "swar", "string"), node.range), node.range);
|
|
2517
|
-
node.range.source.statements.unshift(replaceNode);
|
|
2518
|
-
if (DEBUG > 0)
|
|
2519
|
-
console.log("Added import: " +
|
|
2520
|
-
toString(replaceNode) +
|
|
2521
|
-
" to " +
|
|
2522
|
-
node.range.source.normalizedPath +
|
|
2523
|
-
"\n");
|
|
2524
|
-
}
|
|
2525
|
-
if (codegenMode === JSONMode.SIMD &&
|
|
2526
|
-
!deserializeStringFieldSIMDImport &&
|
|
2527
|
-
!hasLocalDeserializeStringFieldSIMD) {
|
|
2436
|
+
if (!fieldHelpersImport) {
|
|
2437
|
+
const fieldHelper = (real, alias) => Node.createImportDeclaration(Node.createIdentifierExpression(real, node.range, false), Node.createIdentifierExpression(alias, node.range, false), node.range);
|
|
2528
2438
|
const replaceNode = Node.createImportStatement([
|
|
2529
|
-
|
|
2530
|
-
|
|
2439
|
+
fieldHelper("deserializeIntegerField", "__deserializeIntegerField"),
|
|
2440
|
+
fieldHelper("deserializeUnsignedField", "__deserializeUnsignedField"),
|
|
2441
|
+
fieldHelper("deserializeFloatField", "__deserializeFloatField"),
|
|
2442
|
+
fieldHelper("deserializeStringField", "__deserializeStringField"),
|
|
2443
|
+
fieldHelper("deserializeArrayField_SWAR", "__deserializeArrayField_SWAR"),
|
|
2444
|
+
fieldHelper("deserializeMapField", "__deserializeMapField"),
|
|
2445
|
+
fieldHelper("deserializeSetField", "__deserializeSetField"),
|
|
2446
|
+
fieldHelper("deserializeStaticArrayField", "__deserializeStaticArrayField"),
|
|
2447
|
+
], Node.createStringLiteralExpression(path.posix.join(baseRel, "assembly", "deserialize"), node.range), node.range);
|
|
2531
2448
|
node.range.source.statements.unshift(replaceNode);
|
|
2532
2449
|
if (DEBUG > 0)
|
|
2533
2450
|
console.log("Added import: " +
|