json-as 1.1.2 → 1.1.3

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.
@@ -10,7 +10,7 @@ import { getClasses, getImportedClass } from "./linker.js";
10
10
  let indent = " ";
11
11
 
12
12
  const DEBUG = process.env["JSON_DEBUG"];
13
- const STRICT = process.env["JSON_STRICT"] && process.env["JSON_STRICT"] == "false";
13
+ const STRICT = !(process.env["JSON_STRICT"] && process.env["JSON_STRICT"] == "false");
14
14
 
15
15
  class JSONTransform extends Visitor {
16
16
  static SN: JSONTransform = new JSONTransform();
@@ -327,7 +327,7 @@ class JSONTransform extends Visitor {
327
327
 
328
328
  // DESERIALIZE += indent + " console.log(\"data: \" + JSON.Util.ptrToStr(srcStart,srcEnd))\n";
329
329
  DESERIALIZE += indent + " let keyStart: usize = 0;\n";
330
- if (shouldGroup || DEBUG) DESERIALIZE += indent + " let keyEnd: usize = 0;\n";
330
+ DESERIALIZE += indent + " let keyEnd: usize = 0;\n";
331
331
  DESERIALIZE += indent + " let isKey = false;\n";
332
332
  if (sortedMembers.object.length || sortedMembers.array.length) DESERIALIZE += indent + " let depth: i32 = 0;\n";
333
333
  DESERIALIZE += indent + " let lastIndex: usize = 0;\n\n";
@@ -346,7 +346,7 @@ class JSONTransform extends Visitor {
346
346
  DESERIALIZE += indent + " if (code == 34 && load<u16>(srcStart - 2) !== 92) {\n";
347
347
  DESERIALIZE += indent + " if (isKey) {\n";
348
348
  DESERIALIZE += indent + " keyStart = lastIndex;\n";
349
- if (shouldGroup || DEBUG) DESERIALIZE += indent + " keyEnd = srcStart;\n";
349
+ DESERIALIZE += indent + " keyEnd = srcStart;\n";
350
350
  DESERIALIZE += indent + " while (JSON.Util.isSpace((code = load<u16>((srcStart += 2))))) {}\n";
351
351
  DESERIALIZE += indent + " if (code !== 58) throw new Error(\"Expected ':' after key at position \" + (srcEnd - srcStart).toString());\n";
352
352
  DESERIALIZE += indent + " isKey = false;\n";
@@ -359,27 +359,46 @@ class JSONTransform extends Visitor {
359
359
  DESERIALIZE += indent + " } else {\n";
360
360
  // if (shouldGroup) DESERIALIZE += " const keySize = keyEnd - keyStart;\n";
361
361
 
362
- const groupMembers = (members: Property[]) => {
363
- let sorted: Property[][] = [];
364
-
365
- let len = -1;
366
- members
367
- .slice()
368
- .sort((a, b) => (a.alias?.length || a.name.length) - (b.alias?.length || b.name.length))
369
- .forEach((member) => {
370
- const _nameLength = member.alias?.length || member.name.length;
371
- if (_nameLength === len) {
372
- sorted[sorted.length - 1].push(member);
373
- } else {
374
- sorted.push([member]);
375
- len = _nameLength;
376
- }
377
- });
362
+ const groupMembers = (members: Property[]): Property[][] => {
363
+ const groups = new Map<number, Property[]>();
364
+
365
+ for (const member of members) {
366
+ const name = member.alias || member.name;
367
+ const length = name.length;
378
368
 
379
- sorted = sorted.sort((a, b) => b.length - a.length);
380
- return sorted;
369
+ if (!groups.has(length)) {
370
+ groups.set(length, []);
371
+ }
372
+
373
+ groups.get(length)!.push(member);
374
+ }
375
+
376
+ return [...groups.values()]
377
+ .map(group =>
378
+ group.sort((a, b) => {
379
+ const aLen = (a.alias || a.name).length;
380
+ const bLen = (b.alias || b.name).length;
381
+ return aLen - bLen;
382
+ })
383
+ )
384
+ .sort((a, b) => b.length - a.length);
381
385
  };
382
386
 
387
+ const generateGroups = (members: Property[], cb: (group: Property[]) => void) => {
388
+ const groups = groupMembers(members);
389
+ DESERIALIZE += " switch (<u32>keyEnd - <u32>keyStart) {\n";
390
+
391
+ for (const group of groups) {
392
+ const groupLen = (group[0].alias || group[0].name).length << 1
393
+ DESERIALIZE += " case " + groupLen + ": {\n";
394
+ cb(group);
395
+ DESERIALIZE += "\n }\n";
396
+ }
397
+
398
+ DESERIALIZE += " }\n";
399
+ DESERIALIZE += " break;\n";
400
+ }
401
+
383
402
  const generateComparisions = (members: Property[]) => {
384
403
  if (members.some((m) => (m.alias || m.name).length << 1 == 2)) {
385
404
  DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
@@ -400,7 +419,7 @@ class JSONTransform extends Visitor {
400
419
  const complex = isStruct(members[0].type) || members[0].type != "JSON.Obj" || isArray(members[0].type);
401
420
  const firstMemberName = members[0].alias || members[0].name;
402
421
  DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
403
- DESERIALIZE += indent + " store<" + members[0].type + ">(changetype<usize>(out), JSON.__deserialize<" + members[0].type + ">(lastIndex, srcStart" + (isString(members[0].type) ? " + 2" : "") + "), offsetof<this>(" + JSON.stringify(firstMemberName) + "));\n";
422
+ DESERIALIZE += indent + " store<" + members[0].type + ">(changetype<usize>(out), JSON.__deserialize<" + members[0].type + ">(lastIndex, srcStart" + (isString(members[0].type) ? " + 2" : "") + "), offsetof<this>(" + JSON.stringify(members[0].name) + "));\n";
404
423
  if (isString(members[0].type)) DESERIALIZE += indent + " srcStart += 4;\n";
405
424
  else if (!complex) DESERIALIZE += indent + " srcStart += 2;\n";
406
425
  DESERIALIZE += indent + " keyStart = 0;\n";
@@ -411,8 +430,8 @@ class JSONTransform extends Visitor {
411
430
  const member = members[i];
412
431
  const memberName = member.alias || member.name;
413
432
  DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
414
- DESERIALIZE += indent + " store<" + members[0].type + ">(changetype<usize>(out), JSON.__deserialize<" + members[0].type + ">(lastIndex, srcStart" + (isString(members[0].type) ? " + 2" : "") + "), offsetof<this>(" + JSON.stringify(memberName) + "));\n";
415
- if (isString(members[0].type)) DESERIALIZE += indent + " srcStart += 4;\n";
433
+ DESERIALIZE += indent + " store<" + member.type + ">(changetype<usize>(out), JSON.__deserialize<" + member.type + ">(lastIndex, srcStart" + (isString(member.type) ? " + 2" : "") + "), offsetof<this>(" + JSON.stringify(member.name) + "));\n";
434
+ if (isString(member.type)) DESERIALIZE += indent + " srcStart += 4;\n";
416
435
  else if (!complex) DESERIALIZE += indent + " srcStart += 2;\n";
417
436
  DESERIALIZE += indent + " keyStart = 0;\n";
418
437
  DESERIALIZE += indent + " break;\n";
@@ -428,6 +447,7 @@ class JSONTransform extends Visitor {
428
447
 
429
448
  let mbElse = " ";
430
449
  if (sortedMembers.string.length) {
450
+ // generateGroups(sortedMembers.string, generateComparisions)
431
451
  DESERIALIZE += mbElse + "if (code == 34) {\n";
432
452
  DESERIALIZE += " lastIndex = srcStart;\n";
433
453
  DESERIALIZE += " srcStart += 2;\n";
@@ -435,7 +455,7 @@ class JSONTransform extends Visitor {
435
455
  DESERIALIZE += " const code = load<u16>(srcStart);\n";
436
456
  DESERIALIZE += " if (code == 34 && load<u16>(srcStart - 2) !== 92) {\n";
437
457
  // DESERIALIZE += " console.log(JSON.Util.ptrToStr(keyStart,keyEnd) + \" = \" + load<u16>(keyStart).toString() + \" val \" + JSON.Util.ptrToStr(lastIndex, srcStart));\n";
438
- generateComparisions(sortedMembers.string);
458
+ generateGroups(sortedMembers.string, generateComparisions);
439
459
  DESERIALIZE += " }\n"; // Close break char check
440
460
  DESERIALIZE += " srcStart += 2;\n";
441
461
  DESERIALIZE += " }\n"; // Close char scan loop
@@ -452,7 +472,7 @@ class JSONTransform extends Visitor {
452
472
  DESERIALIZE += " if (code == 44 || code == 125 || JSON.Util.isSpace(code)) {\n";
453
473
  // DESERIALIZE += " console.log(JSON.Util.ptrToStr(keyStart,keyEnd) + \" = \" + load<u16>(keyStart).toString() + \" val \" + JSON.Util.ptrToStr(lastIndex, srcStart));\n";
454
474
 
455
- generateComparisions(sortedMembers.number);
475
+ generateGroups(sortedMembers.number, generateComparisions);
456
476
  DESERIALIZE += " }\n"; // Close break char check
457
477
  DESERIALIZE += " srcStart += 2;\n";
458
478
  DESERIALIZE += " }\n"; // Close char scan loop
@@ -475,7 +495,7 @@ class JSONTransform extends Visitor {
475
495
  DESERIALIZE += " srcStart += 2;\n";
476
496
 
477
497
  indent = " ";
478
- generateComparisions(sortedMembers.object);
498
+ generateGroups(sortedMembers.object, generateComparisions);
479
499
  indent = "";
480
500
 
481
501
  DESERIALIZE += " }\n"; // Close break char check
@@ -501,7 +521,7 @@ class JSONTransform extends Visitor {
501
521
  // DESERIALIZE += " console.log(ptrToStr(keyStart,keyEnd) + \" = \" + (load<u64>(keyStart) & 0x0000FFFFFFFFFFFF) .toString());\n";
502
522
 
503
523
  indent = " ";
504
- generateComparisions(sortedMembers.array);
524
+ generateGroups(sortedMembers.array, generateComparisions);
505
525
  indent = "";
506
526
 
507
527
  DESERIALIZE += " }\n"; // Close break char check
@@ -516,75 +536,97 @@ class JSONTransform extends Visitor {
516
536
  DESERIALIZE += mbElse + "if (code == 116) {\n";
517
537
  DESERIALIZE += " if (load<u64>(srcStart) == 28429475166421108) {\n";
518
538
  DESERIALIZE += " srcStart += 8;\n";
519
- if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 == 2)) {
520
- DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
521
- }
522
- if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 == 4)) {
523
- DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
524
- }
525
- if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 == 6)) {
526
- DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
527
- }
528
- if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 == 8)) {
529
- DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
530
- }
531
- if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 > 8)) {
532
- DESERIALIZE += toMemCDecl(Math.max(...sortedMembers.boolean.map((m) => (m.alias || m.name).length << 1)), " ");
533
- }
534
- const firstMemberName = sortedMembers.boolean[0].alias || sortedMembers.boolean[0].name;
535
- DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
536
- DESERIALIZE += indent + " store<" + sortedMembers.boolean[0].type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(sortedMembers.boolean[0].name) + "));\n";
537
- DESERIALIZE += indent + " srcStart += 2;\n";
538
- DESERIALIZE += indent + " keyStart = 0;\n";
539
- DESERIALIZE += indent + " break;\n";
540
- DESERIALIZE += indent + " }";
541
539
 
542
- for (let i = 1; i < sortedMembers.boolean.length; i++) {
543
- const member = sortedMembers.boolean[i];
544
- const memberName = member.alias || member.name;
545
- DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
546
- DESERIALIZE += indent + " store<" + sortedMembers.boolean[0].type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(sortedMembers.boolean[0].name) + "));\n";
547
- DESERIALIZE += indent + " srcStart += 2;\n";
548
- DESERIALIZE += indent + " keyStart = 0;\n";
549
- DESERIALIZE += indent + " break;\n";
550
- DESERIALIZE += indent + " }";
551
- }
540
+ generateGroups(sortedMembers.boolean, (group) => {
541
+ if (group.some((m) => (m.alias || m.name).length << 1 == 2)) {
542
+ DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
543
+ }
544
+ if (group.some((m) => (m.alias || m.name).length << 1 == 4)) {
545
+ DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
546
+ }
547
+ if (group.some((m) => (m.alias || m.name).length << 1 == 6)) {
548
+ DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
549
+ }
550
+ if (group.some((m) => (m.alias || m.name).length << 1 == 8)) {
551
+ DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
552
+ }
553
+ if (group.some((m) => (m.alias || m.name).length << 1 > 8)) {
554
+ DESERIALIZE += toMemCDecl(Math.max(...group.map((m) => (m.alias || m.name).length << 1)), " ");
555
+ }
556
+ const firstMemberName = group[0].alias || group[0].name;
552
557
 
553
- if (STRICT) {
554
- DESERIALIZE += " else {\n";
555
- DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
556
- DESERIALIZE += indent + " }\n";
557
- }
558
+ DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
559
+ DESERIALIZE += indent + " store<" + group[0].type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(group[0].name) + "));\n";
560
+ DESERIALIZE += indent + " srcStart += 2;\n";
561
+ DESERIALIZE += indent + " keyStart = 0;\n";
562
+ DESERIALIZE += indent + " break;\n";
563
+ DESERIALIZE += indent + " }";
564
+
565
+ for (let i = 1; i < group.length; i++) {
566
+ const member = group[i];
567
+ const memberName = member.alias || member.name;
568
+ DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
569
+ DESERIALIZE += indent + " store<" + member.type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(member.name) + "));\n";
570
+ DESERIALIZE += indent + " srcStart += 2;\n";
571
+ DESERIALIZE += indent + " keyStart = 0;\n";
572
+ DESERIALIZE += indent + " break;\n";
573
+ DESERIALIZE += indent + " }";
574
+ }
575
+
576
+ if (STRICT) {
577
+ DESERIALIZE += " else {\n";
578
+ DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
579
+ DESERIALIZE += indent + " }\n";
580
+ }
581
+ });
558
582
 
559
583
  DESERIALIZE += " }"; // Close first char check
560
584
  mbElse = " else ";
561
585
  DESERIALIZE += " else if (load<u64>(srcStart, 2) == 28429466576093281) {\n";
562
586
  DESERIALIZE += " srcStart += 10;\n";
563
587
 
564
- DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
565
- DESERIALIZE += indent + " store<" + sortedMembers.boolean[0].type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(sortedMembers.boolean[0].name) + "));\n";
566
- DESERIALIZE += indent + " srcStart += 2;\n";
567
- DESERIALIZE += indent + " keyStart = 0;\n";
568
- DESERIALIZE += indent + " break;\n";
569
- DESERIALIZE += indent + " }";
588
+ generateGroups(sortedMembers.boolean, (group) => {
589
+ if (group.some((m) => (m.alias || m.name).length << 1 == 2)) {
590
+ DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
591
+ }
592
+ if (group.some((m) => (m.alias || m.name).length << 1 == 4)) {
593
+ DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
594
+ }
595
+ if (group.some((m) => (m.alias || m.name).length << 1 == 6)) {
596
+ DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
597
+ }
598
+ if (group.some((m) => (m.alias || m.name).length << 1 == 8)) {
599
+ DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
600
+ }
601
+ if (group.some((m) => (m.alias || m.name).length << 1 > 8)) {
602
+ DESERIALIZE += toMemCDecl(Math.max(...group.map((m) => (m.alias || m.name).length << 1)), " ");
603
+ }
604
+ const firstMemberName = group[0].alias || group[0].name;
570
605
 
571
- for (let i = 1; i < sortedMembers.boolean.length; i++) {
572
- const member = sortedMembers.boolean[i];
573
- const memberName = member.alias || member.name;
574
- DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
575
- DESERIALIZE += indent + " store<" + sortedMembers.boolean[0].type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(sortedMembers.boolean[0].name) + "));\n";
606
+ DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
607
+ DESERIALIZE += indent + " store<" + group[0].type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(group[0].name) + "));\n";
576
608
  DESERIALIZE += indent + " srcStart += 2;\n";
577
609
  DESERIALIZE += indent + " keyStart = 0;\n";
578
610
  DESERIALIZE += indent + " break;\n";
579
611
  DESERIALIZE += indent + " }";
580
- }
581
612
 
582
- if (STRICT) {
583
- DESERIALIZE += " else {\n";
584
- DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
585
- DESERIALIZE += indent + " }\n";
586
- }
613
+ for (let i = 1; i < group.length; i++) {
614
+ const member = group[i];
615
+ const memberName = member.alias || member.name;
616
+ DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
617
+ DESERIALIZE += indent + " store<" + member.type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(member.name) + "));\n";
618
+ DESERIALIZE += indent + " srcStart += 2;\n";
619
+ DESERIALIZE += indent + " keyStart = 0;\n";
620
+ DESERIALIZE += indent + " break;\n";
621
+ DESERIALIZE += indent + " }";
622
+ }
587
623
 
624
+ if (STRICT) {
625
+ DESERIALIZE += " else {\n";
626
+ DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
627
+ DESERIALIZE += indent + " }\n";
628
+ }
629
+ });
588
630
  DESERIALIZE += " }\n"; // Close first char check
589
631
  DESERIALIZE += " }"; // Close first char check
590
632
  }
@@ -594,47 +636,48 @@ class JSONTransform extends Visitor {
594
636
 
595
637
  DESERIALIZE += " if (load<u64>(srcStart) == 30399761348886638) {\n";
596
638
  DESERIALIZE += " srcStart += 8;\n";
639
+ generateGroups(sortedMembers.null, (group) => {
640
+ if (group.some((m) => (m.alias || m.name).length << 1 == 2)) {
641
+ DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
642
+ }
643
+ if (group.some((m) => (m.alias || m.name).length << 1 == 4)) {
644
+ DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
645
+ }
646
+ if (group.some((m) => (m.alias || m.name).length << 1 == 6)) {
647
+ DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
648
+ }
649
+ if (group.some((m) => (m.alias || m.name).length << 1 == 8)) {
650
+ DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
651
+ }
652
+ if (group.some((m) => (m.alias || m.name).length << 1 > 8)) {
653
+ DESERIALIZE += toMemCDecl(Math.max(...group.map((m) => (m.alias || m.name).length << 1)), " ");
654
+ }
597
655
 
598
- if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 == 2)) {
599
- DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
600
- }
601
- if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 == 4)) {
602
- DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
603
- }
604
- if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 == 6)) {
605
- DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
606
- }
607
- if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 == 8)) {
608
- DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
609
- }
610
- if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 > 8)) {
611
- DESERIALIZE += toMemCDecl(Math.max(...sortedMembers.null.map((m) => (m.alias || m.name).length << 1)), " ");
612
- }
613
-
614
- const firstMemberName = sortedMembers.null[0].alias || sortedMembers.null[0].name;
615
- DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
616
- DESERIALIZE += indent + " store<" + sortedMembers.null[0].type + ">(changetype<usize>(out), null, offsetof<this>(" + JSON.stringify(sortedMembers.null[0].name) + "));\n";
617
- DESERIALIZE += indent + " srcStart += 2;\n";
618
- DESERIALIZE += indent + " keyStart = 0;\n";
619
- DESERIALIZE += indent + " break;\n";
620
- DESERIALIZE += indent + " }";
621
-
622
- for (let i = 1; i < sortedMembers.null.length; i++) {
623
- const member = sortedMembers.null[i];
624
- const memberName = member.alias || member.name;
625
- DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
626
- DESERIALIZE += indent + " store<" + sortedMembers.null[0].type + ">(changetype<usize>(out), null, offsetof<this>(" + JSON.stringify(sortedMembers.null[0].name) + "));\n";
656
+ const firstMemberName = group[0].alias || group[0].name;
657
+ DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
658
+ DESERIALIZE += indent + " store<" + group[0].type + ">(changetype<usize>(out), null, offsetof<this>(" + JSON.stringify(group[0].name) + "));\n";
627
659
  DESERIALIZE += indent + " srcStart += 2;\n";
628
660
  DESERIALIZE += indent + " keyStart = 0;\n";
629
661
  DESERIALIZE += indent + " break;\n";
630
662
  DESERIALIZE += indent + " }";
631
- }
632
663
 
633
- if (STRICT) {
634
- DESERIALIZE += " else {\n";
635
- DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
636
- DESERIALIZE += indent + " }\n";
637
- }
664
+ for (let i = 1; i < group.length; i++) {
665
+ const member = group[i];
666
+ const memberName = member.alias || member.name;
667
+ DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
668
+ DESERIALIZE += indent + " store<" + group[0].type + ">(changetype<usize>(out), null, offsetof<this>(" + JSON.stringify(group[0].name) + "));\n";
669
+ DESERIALIZE += indent + " srcStart += 2;\n";
670
+ DESERIALIZE += indent + " keyStart = 0;\n";
671
+ DESERIALIZE += indent + " break;\n";
672
+ DESERIALIZE += indent + " }";
673
+ }
674
+
675
+ if (STRICT) {
676
+ DESERIALIZE += " else {\n";
677
+ DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
678
+ DESERIALIZE += indent + " }\n";
679
+ }
680
+ });
638
681
 
639
682
  DESERIALIZE += " }"; // Close first char check
640
683
  DESERIALIZE += "\n }"; // Close first char check