json-as 1.1.20 → 1.1.22

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/lib/as-bs.ts CHANGED
@@ -5,13 +5,13 @@ import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
5
5
  */
6
6
  export namespace bs {
7
7
  /** Current buffer pointer. */ // @ts-ignore
8
- export let buffer: ArrayBuffer = new ArrayBuffer(32); //__new(32, idof<ArrayBuffer>());
8
+ export let buffer: ArrayBuffer = new ArrayBuffer(128); //__new(128, idof<ArrayBuffer>());
9
9
 
10
10
  /** Current offset within the buffer. */
11
11
  export let offset: usize = changetype<usize>(buffer);
12
12
 
13
13
  /** Byte length of the buffer. */
14
- let bufferSize: usize = 32;
14
+ let bufferSize: usize = 128;
15
15
 
16
16
  /** Proposed size of output */
17
17
  export let stackSize: usize = 0;
@@ -56,9 +56,9 @@ export namespace bs {
56
56
  */
57
57
  // @ts-ignore: decorator
58
58
  @inline export function ensureSize(size: u32): void {
59
- // console.log("Ensure " + (stackSize).toString() + " -> " + (stackSize + size).toString() + " (" + size.toString() + ") " + (((stackSize + size) > bufferSize) ? "+" : ""));
59
+ // console.log("Ensure " + (size).toString() + " -> " + (offset + size).toString() + " (" + (offset - changetype<usize>(buffer)).toString() + ")");
60
60
  if (offset + size > bufferSize + changetype<usize>(buffer)) {
61
- const deltaBytes = nextPowerOf2(size + 64);
61
+ const deltaBytes = size + 128;
62
62
  bufferSize += deltaBytes;
63
63
  // @ts-ignore: exists
64
64
  const newPtr = changetype<ArrayBuffer>(__renew(changetype<usize>(buffer), bufferSize));
@@ -74,9 +74,9 @@ export namespace bs {
74
74
  */
75
75
  // @ts-ignore: decorator
76
76
  @inline export function proposeSize(size: u32): void {
77
- // console.log("Propose " + (stackSize).toString() + " -> " + (stackSize + size).toString() + " (" + size.toString() + ") " + (((stackSize + size) > bufferSize) ? "+" : ""));
77
+ // console.log("Propose " + (size).toString() + " -> " + (stackSize + size).toString() + " (" + (offset - changetype<usize>(buffer)).toString() + ")");
78
78
  if ((stackSize += size) > bufferSize) {
79
- const deltaBytes = nextPowerOf2(size);
79
+ const deltaBytes = size;
80
80
  bufferSize += deltaBytes;
81
81
  // @ts-ignore: exists
82
82
  const newPtr = changetype<ArrayBuffer>(__renew(changetype<usize>(buffer), bufferSize));
@@ -86,15 +86,15 @@ export namespace bs {
86
86
  }
87
87
 
88
88
  /**
89
- * Increases the proposed size by nextPowerOf2(n + 64) if necessary.
89
+ * Increases the proposed size by n + 128 if necessary.
90
90
  * If necessary, reallocates the buffer to the exact new size.
91
91
  * @param size - The size to grow by.
92
92
  */
93
93
  // @ts-ignore: decorator
94
94
  @inline export function growSize(size: u32): void {
95
- // console.log("Grow " + (stackSize).toString() + " -> " + (stackSize + size).toString() + " (" + size.toString() + ") " + (((stackSize + size) > bufferSize) ? "+" : ""));
95
+ // console.log("Grow " + (size).toString() + " -> " + (stackSize + size).toString() + " (" + (offset - changetype<usize>(buffer)).toString() + ")");
96
96
  if ((stackSize += size) > bufferSize) {
97
- const deltaBytes = nextPowerOf2(size + 64);
97
+ const deltaBytes = size + 128;
98
98
  bufferSize += deltaBytes;
99
99
  // @ts-ignore
100
100
  const newPtr = changetype<ArrayBuffer>(__renew(changetype<usize>(buffer), bufferSize));
@@ -147,6 +147,7 @@ export namespace bs {
147
147
  // @ts-ignore: Decorator valid here
148
148
  @inline export function out<T>(): T {
149
149
  const len = offset - changetype<usize>(buffer);
150
+ // console.log("Out " + (len).toString() + " -> " + (stackSize).toString() + " (" + (offset - changetype<usize>(buffer)).toString() + ")");
150
151
  // @ts-ignore: exists
151
152
  const _out = __new(len, idof<T>());
152
153
  memory.copy(_out, changetype<usize>(buffer), len);
@@ -177,9 +178,9 @@ export namespace bs {
177
178
  }
178
179
 
179
180
  // @ts-ignore: Decorator valid here
180
- @inline function nextPowerOf2(n: u32): u32 {
181
- return 1 << (32 - clz(n - 1));
182
- }
181
+ // @inline function nextPowerOf2(n: u32): u32 {
182
+ // return 1 << (32 - clz(n - 1));
183
+ // }
183
184
 
184
185
  // @ts-ignore: Decorator valid here
185
186
  @inline function bytes<T>(o: T): i32 {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "json-as",
3
- "version": "1.1.20",
3
+ "version": "1.1.22",
4
4
  "author": "Jairus Tanaka",
5
5
  "repository": {
6
6
  "type": "git",
@@ -9,13 +9,12 @@
9
9
  "main": "transform/lib/index.js",
10
10
  "devDependencies": {
11
11
  "@assemblyscript/wasi-shim": "^0.1.0",
12
- "@types/node": "^24.0.8",
13
- "assemblyscript": "^0.28.2",
12
+ "@types/node": "^24.2.1",
13
+ "assemblyscript": "^0.28.4",
14
14
  "assemblyscript-prettier": "^3.0.1",
15
15
  "prettier": "^3.6.2",
16
- "tinybench": "^4.0.1",
17
- "tsx": "^4.20.3",
18
- "typescript": "^5.8.3"
16
+ "tinybench": "^5.0.1",
17
+ "typescript": "^5.9.2"
19
18
  },
20
19
  "bugs": {
21
20
  "url": "https://github.com/JairusSW/json-as/issues"
@@ -58,7 +57,8 @@
58
57
  "test": "bash ./run-tests.sh",
59
58
  "bench:as": "bash ./run-bench.as.sh",
60
59
  "bench:js": "bash ./run-bench.js.sh",
61
- "build:test": "rm -rf ./build/ && JSON_DEBUG=1 JSON_WRITE=assembly/test.ts asc assembly/test.ts --transform ./transform -o ./build/test.wasm --textFile ./build/test.wat --debug --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json",
60
+ "build:test": "rm -rf ./build/ && JSON_DEBUG=2 JSON_WRITE=assembly/test.ts asc assembly/test.ts --transform ./transform -o ./build/test.wasm --textFile ./build/test.wat --enable simd --debug --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json",
61
+ "build:tmp:test": "rm -rf ./build/ && JSON_DEBUG=1 asc assembly/test.tmp.ts -o ./build/test.wasm --textFile ./build/test.wat --enable simd --debug --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json",
62
62
  "build:test:wine": "JSON_DEBUG=1 JSON_WRITE=assembly/test.ts NODE_SKIP_PLATFORM_CHECK=1 wine ~/.win-bin/node/node.exe ./node_modules/assemblyscript/bin/asc.js assembly/test.ts --transform ./transform -o ./build/test.wasm --textFile ./build/test.wat --debug --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json",
63
63
  "test:wasmtime": "wasmtime ./build/test.wasm",
64
64
  "test:wasmer": "wasmer ./build/test.wasm",
package/run-bench.as.sh CHANGED
@@ -1,12 +1,12 @@
1
1
  #!/bin/bash
2
2
  RUNTIMES=${RUNTIMES:-"minimal stub"}
3
3
  ENGINES=${ENGINES:-"liftoff ignition sparkplug turbofan llvm"}
4
- for file in ./assembly/__benches__/abc.bench.ts; do
4
+ for file in ./assembly/__benches__/vec3.bench.ts; do
5
5
  filename=$(basename -- "$file")
6
6
  for runtime in $RUNTIMES; do
7
7
  output="./build/${filename%.ts}.${runtime}"
8
8
 
9
- npx asc "$file" --transform ./transform -o "${output}.1" -O3 --converge --noAssert --uncheckedBehavior always --runtime $runtime --enable bulk-memory --exportStart start || {
9
+ npx asc "$file" --transform ./transform -o "${output}.1" -O3 --converge --noAssert --uncheckedBehavior always --runtime $runtime --enable simd --enable bulk-memory --exportStart start || {
10
10
  echo "Build failed"
11
11
  exit 1
12
12
  }
@@ -43,7 +43,7 @@ for file in ./assembly/__benches__/abc.bench.ts; do
43
43
  fi
44
44
 
45
45
  if [[ "$engine" == "llvm" ]]; then
46
- wasmer run --llvm --enable-simd --enable-bulk-memory "${output}.wasi.wasm"
46
+ wasmer run --cranelift --enable-simd --enable-bulk-memory "${output}.wasi.wasm"
47
47
  fi
48
48
  done
49
49
  done
package/run-bench.js.sh CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/bin/bash
2
2
  RUNTIMES=${RUNTIMES:-"liftoff ignition sparkplug turbofan"}
3
3
  npx tsc -p ./bench > /dev/null 2>&1
4
- for file in ./bench/abc.bench.ts; do
4
+ for file in ./bench/vec3.bench.ts; do
5
5
  filename=$(basename -- "$file")
6
6
  file_js="${filename%.ts}.js"
7
7
 
package/run-tests.sh CHANGED
@@ -8,7 +8,7 @@ for file in ./assembly/__tests__/*.spec.ts; do
8
8
  output="./build/${filename%.ts}.wasm"
9
9
 
10
10
  start_time=$(date +%s%3N)
11
- npx asc "$file" --transform ./transform -o "$output" --enable simd --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json --disableWarning 226 || { echo "Tests failed"; exit 1; }
11
+ npx asc "$file" --transform ./transform -o "$output" --runtime incremental --enable simd --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json --debug --disableWarning 226 || { echo "Tests failed"; exit 1; }
12
12
  end_time=$(date +%s%3N)
13
13
 
14
14
  build_time=$((end_time - start_time))
@@ -33,6 +33,37 @@ export class JSONTransform extends Visitor {
33
33
  throw new Error("Class " + node.name.text + " is missing an @json or @serializable decorator in " + node.range.source.internalPath);
34
34
  this.visitClassDeclaration(node);
35
35
  }
36
+ resolveType(type, source, visited = new Set()) {
37
+ const stripped = stripNull(type);
38
+ if (visited.has(stripped)) {
39
+ return stripped;
40
+ }
41
+ visited.add(stripped);
42
+ const resolvedType = source.aliases.find(v => stripNull(v.name) === stripped)?.getBaseType();
43
+ if (resolvedType) {
44
+ return this.resolveType(resolvedType, source, visited);
45
+ }
46
+ for (const imp of source.imports) {
47
+ if (!imp.declarations)
48
+ continue;
49
+ for (const decl of imp.declarations) {
50
+ if (decl.name.text === stripped) {
51
+ const externalSource = this.parser.sources.find(s => s.internalPath === imp.internalPath);
52
+ if (externalSource) {
53
+ const externalSrc = this.sources.get(externalSource);
54
+ if (!externalSrc)
55
+ continue;
56
+ const externalAlias = externalSrc.aliases.find(a => a.name === decl.foreignName.text);
57
+ if (externalAlias) {
58
+ const externalType = externalAlias.getBaseType();
59
+ return this.resolveType(externalType, externalSrc, visited);
60
+ }
61
+ }
62
+ }
63
+ }
64
+ }
65
+ return type;
66
+ }
36
67
  visitClassDeclaration(node) {
37
68
  if (!node.decorators?.length)
38
69
  return;
@@ -113,7 +144,7 @@ export class JSONTransform extends Visitor {
113
144
  }
114
145
  const getUnknownTypes = (type, types = []) => {
115
146
  type = stripNull(type);
116
- type = source.aliases.find((v) => stripNull(v.name) == type)?.getBaseType() || type;
147
+ type = this.resolveType(type, source);
117
148
  if (type.startsWith("Array<")) {
118
149
  return getUnknownTypes(type.slice(6, -1));
119
150
  }
@@ -252,7 +283,7 @@ export class JSONTransform extends Visitor {
252
283
  if (!member.type)
253
284
  throwError("Fields must be strongly typed", node.range);
254
285
  let type = toString(member.type);
255
- type = source.aliases.find((v) => stripNull(v.name) == stripNull(type))?.getBaseType() || type;
286
+ type = this.resolveType(type, source);
256
287
  const name = member.name;
257
288
  const value = member.initializer ? toString(member.initializer) : null;
258
289
  if (type.startsWith("(") && type.includes("=>"))
@@ -433,7 +464,7 @@ export class JSONTransform extends Visitor {
433
464
  sortedMembers.string.push(member);
434
465
  else if (isBoolean(type) || type.startsWith("JSON.Box<bool"))
435
466
  sortedMembers.boolean.push(member);
436
- else if (isPrimitive(type) || type.startsWith("JSON.Box<"))
467
+ else if (isPrimitive(type) || type.startsWith("JSON.Box<") || isEnum(type, this.sources.get(this.schema.node.range.source), this.parser))
437
468
  sortedMembers.number.push(member);
438
469
  else if (isArray(type))
439
470
  sortedMembers.array.push(member);
@@ -569,7 +600,7 @@ export class JSONTransform extends Visitor {
569
600
  generateConsts(group);
570
601
  const first = group[0];
571
602
  const fName = first.alias || first.name;
572
- DESERIALIZE += indent + " if (" + (first.generic ? "isString<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
603
+ DESERIALIZE += indent + " if (" + (first.generic ? "isString<" + first.type + ">() && " : "") + getComparison(fName) + ") { // " + fName + "\n";
573
604
  DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart + 2), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
574
605
  DESERIALIZE += indent + " srcStart += 4;\n";
575
606
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -578,7 +609,7 @@ export class JSONTransform extends Visitor {
578
609
  for (let i = 1; i < group.length; i++) {
579
610
  const mem = group[i];
580
611
  const memName = mem.alias || mem.name;
581
- DESERIALIZE += indent + " else if (" + (mem.generic ? "isString<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
612
+ DESERIALIZE += indent + " else if (" + (mem.generic ? "isString<" + mem.type + ">() && " : "") + getComparison(memName) + ") { // " + memName + "\n";
582
613
  DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart + 2), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
583
614
  DESERIALIZE += indent + " srcStart += 4;\n";
584
615
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -617,7 +648,7 @@ export class JSONTransform extends Visitor {
617
648
  generateConsts(group);
618
649
  const first = group[0];
619
650
  const fName = first.alias || first.name;
620
- DESERIALIZE += indent + " if (" + (first.generic ? "(isInteger<" + first.type + ">() || isFloat<" + first.type + ">()) && " : "") + getComparision(fName) + ") { // " + fName + "\n";
651
+ DESERIALIZE += indent + " if (" + (first.generic ? "(isInteger<" + first.type + ">() || isFloat<" + first.type + ">()) && " : "") + getComparison(fName) + ") { // " + fName + "\n";
621
652
  DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
622
653
  DESERIALIZE += indent + " srcStart += 2;\n";
623
654
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -626,7 +657,7 @@ export class JSONTransform extends Visitor {
626
657
  for (let i = 1; i < group.length; i++) {
627
658
  const mem = group[i];
628
659
  const memName = mem.alias || mem.name;
629
- DESERIALIZE += indent + " else if (" + (mem.generic ? "(isInteger<" + mem.type + ">() || isFloat<" + mem.type + ">()) && " : "") + getComparision(memName) + ") { // " + memName + "\n";
660
+ DESERIALIZE += indent + " else if (" + (mem.generic ? "(isInteger<" + mem.type + ">() || isFloat<" + mem.type + ">()) && " : "") + getComparison(memName) + ") { // " + memName + "\n";
630
661
  DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
631
662
  DESERIALIZE += indent + " srcStart += 2;\n";
632
663
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -672,7 +703,7 @@ export class JSONTransform extends Visitor {
672
703
  generateConsts(group);
673
704
  const first = group[0];
674
705
  const fName = first.alias || first.name;
675
- DESERIALIZE += indent + " if (" + (first.generic ? "isDefined(out.__DESERIALIZE) &&" : "") + getComparision(fName) + ") { // " + fName + "\n";
706
+ DESERIALIZE += indent + " if (" + (first.generic ? "isDefined(out.__DESERIALIZE) &&" : "") + getComparison(fName) + ") { // " + fName + "\n";
676
707
  DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
677
708
  DESERIALIZE += indent + " keyStart = 0;\n";
678
709
  DESERIALIZE += indent + " break;\n";
@@ -680,7 +711,7 @@ export class JSONTransform extends Visitor {
680
711
  for (let i = 1; i < group.length; i++) {
681
712
  const mem = group[i];
682
713
  const memName = mem.alias || mem.name;
683
- DESERIALIZE += indent + " else if (" + (mem.generic ? "isDefined(out.__DESERIALIZE) &&" : "") + getComparision(memName) + ") { // " + memName + "\n";
714
+ DESERIALIZE += indent + " else if (" + (mem.generic ? "isDefined(out.__DESERIALIZE) &&" : "") + getComparison(memName) + ") { // " + memName + "\n";
684
715
  DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
685
716
  DESERIALIZE += indent + " keyStart = 0;\n";
686
717
  DESERIALIZE += indent + " break;\n";
@@ -726,7 +757,7 @@ export class JSONTransform extends Visitor {
726
757
  generateConsts(group);
727
758
  const first = group[0];
728
759
  const fName = first.alias || first.name;
729
- DESERIALIZE += indent + " if (" + (first.generic ? "isArray<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
760
+ DESERIALIZE += indent + " if (" + (first.generic ? "isArray<" + first.type + ">() && " : "") + getComparison(fName) + ") { // " + fName + "\n";
730
761
  DESERIALIZE += indent + " store<" + first.type + ">(changetype<usize>(out), JSON.__deserialize<" + first.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(first.name) + "));\n";
731
762
  DESERIALIZE += indent + " keyStart = 0;\n";
732
763
  DESERIALIZE += indent + " break;\n";
@@ -734,7 +765,7 @@ export class JSONTransform extends Visitor {
734
765
  for (let i = 1; i < group.length; i++) {
735
766
  const mem = group[i];
736
767
  const memName = mem.alias || mem.name;
737
- DESERIALIZE += indent + " else if (" + (mem.generic ? "isArray" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
768
+ DESERIALIZE += indent + " else if (" + (mem.generic ? "isArray" + mem.type + ">() && " : "") + getComparison(memName) + ") { // " + memName + "\n";
738
769
  DESERIALIZE += indent + " store<" + mem.type + ">(changetype<usize>(out), JSON.__deserialize<" + mem.type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
739
770
  DESERIALIZE += indent + " keyStart = 0;\n";
740
771
  DESERIALIZE += indent + " break;\n";
@@ -770,7 +801,7 @@ export class JSONTransform extends Visitor {
770
801
  generateConsts(group);
771
802
  const first = group[0];
772
803
  const fName = first.alias || first.name;
773
- DESERIALIZE += indent + " if (" + (first.generic ? "isBoolean<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
804
+ DESERIALIZE += indent + " if (" + (first.generic ? "isBoolean<" + first.type + ">() && " : "") + getComparison(fName) + ") { // " + fName + "\n";
774
805
  DESERIALIZE += indent + " store<boolean>(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(first.name) + "));\n";
775
806
  DESERIALIZE += indent + " srcStart += 2;\n";
776
807
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -779,7 +810,7 @@ export class JSONTransform extends Visitor {
779
810
  for (let i = 1; i < group.length; i++) {
780
811
  const mem = group[i];
781
812
  const memName = mem.alias || mem.name;
782
- DESERIALIZE += indent + " else if (" + (mem.generic ? "isBoolean<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
813
+ DESERIALIZE += indent + " else if (" + (mem.generic ? "isBoolean<" + mem.type + ">() && " : "") + getComparison(memName) + ") { // " + memName + "\n";
783
814
  DESERIALIZE += indent + " store<boolean>(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
784
815
  DESERIALIZE += indent + " srcStart += 2;\n";
785
816
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -814,7 +845,7 @@ export class JSONTransform extends Visitor {
814
845
  generateConsts(group);
815
846
  const first = group[0];
816
847
  const fName = first.alias || first.name;
817
- DESERIALIZE += indent + " if (" + (first.generic ? "isBoolean<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
848
+ DESERIALIZE += indent + " if (" + (first.generic ? "isBoolean<" + first.type + ">() && " : "") + getComparison(fName) + ") { // " + fName + "\n";
818
849
  DESERIALIZE += indent + " store<boolean>(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(first.name) + "));\n";
819
850
  DESERIALIZE += indent + " srcStart += 2;\n";
820
851
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -823,7 +854,7 @@ export class JSONTransform extends Visitor {
823
854
  for (let i = 1; i < group.length; i++) {
824
855
  const mem = group[i];
825
856
  const memName = mem.alias || mem.name;
826
- DESERIALIZE += indent + " else if (" + (mem.generic ? "isBoolean<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
857
+ DESERIALIZE += indent + " else if (" + (mem.generic ? "isBoolean<" + mem.type + ">() && " : "") + getComparison(memName) + ") { // " + memName + "\n";
827
858
  DESERIALIZE += indent + " store<boolean>(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
828
859
  DESERIALIZE += indent + " srcStart += 2;\n";
829
860
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -860,7 +891,7 @@ export class JSONTransform extends Visitor {
860
891
  generateConsts(group);
861
892
  const first = group[0];
862
893
  const fName = first.alias || first.name;
863
- DESERIALIZE += indent + " if (" + (first.generic ? "isNullable<" + first.type + ">() && " : "") + getComparision(fName) + ") { // " + fName + "\n";
894
+ DESERIALIZE += indent + " if (" + (first.generic ? "isNullable<" + first.type + ">() && " : "") + getComparison(fName) + ") { // " + fName + "\n";
864
895
  DESERIALIZE += indent + " store<usize>(changetype<usize>(out), 0, offsetof<this>(" + JSON.stringify(first.name) + "));\n";
865
896
  DESERIALIZE += indent + " srcStart += 2;\n";
866
897
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -869,7 +900,7 @@ export class JSONTransform extends Visitor {
869
900
  for (let i = 1; i < group.length; i++) {
870
901
  const mem = group[i];
871
902
  const memName = mem.alias || mem.name;
872
- DESERIALIZE += indent + " else if (" + (mem.generic ? "isNullable<" + mem.type + ">() && " : "") + getComparision(memName) + ") { // " + memName + "\n";
903
+ DESERIALIZE += indent + " else if (" + (mem.generic ? "isNullable<" + mem.type + ">() && " : "") + getComparison(memName) + ") { // " + memName + "\n";
873
904
  DESERIALIZE += indent + " store<usize>(changetype<usize>(out), 0, offsetof<this>(" + JSON.stringify(mem.name) + "));\n";
874
905
  DESERIALIZE += indent + " srcStart += 2;\n";
875
906
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -1226,6 +1257,9 @@ function isString(type) {
1226
1257
  function isArray(type) {
1227
1258
  return type.startsWith("Array<");
1228
1259
  }
1260
+ function isEnum(type, source, parser) {
1261
+ return source.getEnum(type) != null || source.getImportedEnum(type, parser) != null;
1262
+ }
1229
1263
  export function stripNull(type) {
1230
1264
  if (type.endsWith(" | null")) {
1231
1265
  return type.slice(0, type.length - 7);
@@ -1235,7 +1269,7 @@ export function stripNull(type) {
1235
1269
  }
1236
1270
  return type;
1237
1271
  }
1238
- function getComparision(data) {
1272
+ function getComparison(data) {
1239
1273
  switch (data.length << 1) {
1240
1274
  case 2: {
1241
1275
  return "code16 == " + data.charCodeAt(0);