quicktype-core 23.0.69 → 23.0.71
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/dist/language/CJSON.js +533 -191
- package/dist/language/Python.js +1 -1
- package/package.json +1 -1
package/dist/language/CJSON.js
CHANGED
|
@@ -44,14 +44,49 @@ const pascalUpperAcronymsValue = ["pascal-case-upper-acronyms", "pascal-upper-ac
|
|
|
44
44
|
const camelUpperAcronymsValue = ["camel-case-upper-acronyms", "camel-upper-acronyms"];
|
|
45
45
|
/* cJSON generator options */
|
|
46
46
|
exports.cJSONOptions = {
|
|
47
|
-
typeSourceStyle: new RendererOptions_1.EnumOption("source-style", "Source code generation type, whether to generate single or multiple source files", [
|
|
48
|
-
|
|
47
|
+
typeSourceStyle: new RendererOptions_1.EnumOption("source-style", "Source code generation type, whether to generate single or multiple source files", [
|
|
48
|
+
["single-source", true],
|
|
49
|
+
["multi-source", false]
|
|
50
|
+
], "single-source", "secondary"),
|
|
51
|
+
typeIntegerSize: new RendererOptions_1.EnumOption("integer-size", "Integer code generation type (int64_t by default)", [
|
|
52
|
+
["int8_t", "int8_t"],
|
|
53
|
+
["int16_t", "int16_t"],
|
|
54
|
+
["int32_t", "int32_t"],
|
|
55
|
+
["int64_t", "int64_t"]
|
|
56
|
+
], "int64_t", "secondary"),
|
|
49
57
|
hashtableSize: new RendererOptions_1.StringOption("hashtable-size", "Hashtable size, used when maps are created (64 by default)", "SIZE", "64"),
|
|
50
|
-
addTypedefAlias: new RendererOptions_1.EnumOption("typedef-alias", "Add typedef alias to unions, structs, and enums (no typedef by default)", [
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
58
|
+
addTypedefAlias: new RendererOptions_1.EnumOption("typedef-alias", "Add typedef alias to unions, structs, and enums (no typedef by default)", [
|
|
59
|
+
["no-typedef", false],
|
|
60
|
+
["add-typedef", true]
|
|
61
|
+
], "no-typedef", "secondary"),
|
|
62
|
+
printStyle: new RendererOptions_1.EnumOption("print-style", "Which cJSON print should be used (formatted by default)", [
|
|
63
|
+
["print-formatted", false],
|
|
64
|
+
["print-unformatted", true]
|
|
65
|
+
], "print-formatted", "secondary"),
|
|
66
|
+
typeNamingStyle: new RendererOptions_1.EnumOption("type-style", "Naming style for types", [
|
|
67
|
+
pascalValue,
|
|
68
|
+
underscoreValue,
|
|
69
|
+
camelValue,
|
|
70
|
+
upperUnderscoreValue,
|
|
71
|
+
pascalUpperAcronymsValue,
|
|
72
|
+
camelUpperAcronymsValue
|
|
73
|
+
]),
|
|
74
|
+
memberNamingStyle: new RendererOptions_1.EnumOption("member-style", "Naming style for members", [
|
|
75
|
+
underscoreValue,
|
|
76
|
+
pascalValue,
|
|
77
|
+
camelValue,
|
|
78
|
+
upperUnderscoreValue,
|
|
79
|
+
pascalUpperAcronymsValue,
|
|
80
|
+
camelUpperAcronymsValue
|
|
81
|
+
]),
|
|
82
|
+
enumeratorNamingStyle: new RendererOptions_1.EnumOption("enumerator-style", "Naming style for enumerators", [
|
|
83
|
+
upperUnderscoreValue,
|
|
84
|
+
underscoreValue,
|
|
85
|
+
pascalValue,
|
|
86
|
+
camelValue,
|
|
87
|
+
pascalUpperAcronymsValue,
|
|
88
|
+
camelUpperAcronymsValue
|
|
89
|
+
])
|
|
55
90
|
};
|
|
56
91
|
/* cJSON generator target language */
|
|
57
92
|
class CJSONTargetLanguage extends TargetLanguage_1.TargetLanguage {
|
|
@@ -376,7 +411,7 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
376
411
|
/* Create file */
|
|
377
412
|
this.startFile(proposedFilename);
|
|
378
413
|
/* Create types */
|
|
379
|
-
this.forEachDeclaration("leading-and-interposing",
|
|
414
|
+
this.forEachDeclaration("leading-and-interposing", decl => {
|
|
380
415
|
if (decl.kind === "forward") {
|
|
381
416
|
this.emitLine("struct ", this.nameForNamedType(decl.type), ";");
|
|
382
417
|
}
|
|
@@ -511,7 +546,7 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
511
546
|
let onFirst = true;
|
|
512
547
|
const combinedName = (0, Strings_1.allUpperWordStyle)(this.sourcelikeToString(enumName));
|
|
513
548
|
this.forEachEnumCase(enumType, "none", (name, jsonName) => {
|
|
514
|
-
this.emitLine(onFirst ? "" : "else ",
|
|
549
|
+
this.emitLine(onFirst ? "" : "else ", 'if (!strcmp(cJSON_GetStringValue(j), "', jsonName, '")) x = ', combinedName, "_", name, ";");
|
|
515
550
|
onFirst = false;
|
|
516
551
|
});
|
|
517
552
|
});
|
|
@@ -524,7 +559,7 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
524
559
|
this.emitBlock(["switch (x)"], () => {
|
|
525
560
|
const combinedName = (0, Strings_1.allUpperWordStyle)(this.sourcelikeToString(enumName));
|
|
526
561
|
this.forEachEnumCase(enumType, "none", (name, jsonName) => {
|
|
527
|
-
this.emitLine("case ", combinedName, "_", name,
|
|
562
|
+
this.emitLine("case ", combinedName, "_", name, ': j = cJSON_CreateString("', jsonName, '"); break;');
|
|
528
563
|
});
|
|
529
564
|
});
|
|
530
565
|
this.emitLine("return j;");
|
|
@@ -566,7 +601,7 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
566
601
|
this.emitBlock(["union"], () => {
|
|
567
602
|
for (const type of nonNulls) {
|
|
568
603
|
const cJSON = this.quicktypeTypeToCJSON(type, false);
|
|
569
|
-
this.emitLine(cJSON.cType,
|
|
604
|
+
this.emitLine(cJSON.cType, cJSON.optionalQualifier !== "" ? " " : "", cJSON.optionalQualifier, " ", this.nameForUnionMember(unionType, type), ";");
|
|
570
605
|
}
|
|
571
606
|
}, "value", true);
|
|
572
607
|
}, "", true);
|
|
@@ -605,15 +640,21 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
605
640
|
}
|
|
606
641
|
for (const type of nonNulls) {
|
|
607
642
|
const cJSON = this.quicktypeTypeToCJSON(type, false);
|
|
608
|
-
this.emitBlock([
|
|
643
|
+
this.emitBlock([onFirst === true ? "if (" : "else if (", cJSON.isType, "(j))"], () => {
|
|
609
644
|
this.emitLine("x->type = ", cJSON.cjsonType, ";");
|
|
610
|
-
if (
|
|
645
|
+
if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) {
|
|
611
646
|
const level = 0;
|
|
612
647
|
const child_level = 1;
|
|
613
648
|
this.emitLine(cJSON.cType, " * x", child_level.toString(), " = list_create(false, NULL);");
|
|
614
649
|
this.emitBlock(["if (NULL != x", child_level.toString(), ")"], () => {
|
|
615
650
|
this.emitLine("cJSON * e", child_level.toString(), " = NULL;");
|
|
616
|
-
this.emitBlock([
|
|
651
|
+
this.emitBlock([
|
|
652
|
+
"cJSON_ArrayForEach(e",
|
|
653
|
+
child_level.toString(),
|
|
654
|
+
", j",
|
|
655
|
+
level > 0 ? level.toString() : "",
|
|
656
|
+
")"
|
|
657
|
+
], () => {
|
|
617
658
|
const add = (cJSON, level, child_level) => {
|
|
618
659
|
if (cJSON.items.cjsonType === "cJSON_Array") {
|
|
619
660
|
/* Not supported */
|
|
@@ -621,20 +662,22 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
621
662
|
else if (cJSON.items.cjsonType === "cJSON_Map") {
|
|
622
663
|
/* Not supported */
|
|
623
664
|
}
|
|
624
|
-
else if (
|
|
665
|
+
else if (cJSON.items.cjsonType === "cJSON_Invalid" ||
|
|
666
|
+
cJSON.items.cjsonType === "cJSON_NULL") {
|
|
625
667
|
this.emitLine("list_add_tail(x", child_level.toString(), ", (", cJSON.items.cType, " *)0xDEADBEEF, sizeof(", cJSON.items.cType, " *));");
|
|
626
668
|
}
|
|
627
669
|
else if (cJSON.items.cjsonType === "cJSON_String") {
|
|
628
670
|
this.emitLine("list_add_tail(x", child_level.toString(), ", strdup(", cJSON.items.getValue, "(e", child_level.toString(), ")), sizeof(", cJSON.items.cType, " *));");
|
|
629
671
|
}
|
|
630
|
-
else if (
|
|
672
|
+
else if (cJSON.items.cjsonType === "cJSON_Object" ||
|
|
673
|
+
cJSON.items.cjsonType === "cJSON_Union") {
|
|
631
674
|
this.emitLine("list_add_tail(x", child_level.toString(), ", ", cJSON.items.getValue, "(e", child_level.toString(), "), sizeof(", cJSON.items.cType, " *));");
|
|
632
675
|
}
|
|
633
676
|
else {
|
|
634
|
-
this.emitLine(cJSON.items.cType, " * tmp",
|
|
635
|
-
this.emitBlock(["if (NULL != tmp",
|
|
636
|
-
this.emitLine("* tmp",
|
|
637
|
-
this.emitLine("list_add_tail(x", child_level.toString(), ", tmp",
|
|
677
|
+
this.emitLine(cJSON.items.cType, " * tmp", level > 0 ? level.toString() : "", " = cJSON_malloc(sizeof(", cJSON.items.cType, "));");
|
|
678
|
+
this.emitBlock(["if (NULL != tmp", level > 0 ? level.toString() : "", ")"], () => {
|
|
679
|
+
this.emitLine("* tmp", level > 0 ? level.toString() : "", " = ", cJSON.items.getValue, "(e", child_level.toString(), ");");
|
|
680
|
+
this.emitLine("list_add_tail(x", child_level.toString(), ", tmp", level > 0 ? level.toString() : "", ", sizeof(", cJSON.items.cType, " *));");
|
|
638
681
|
});
|
|
639
682
|
}
|
|
640
683
|
};
|
|
@@ -653,13 +696,19 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
653
696
|
this.emitLine("x->value.", this.nameForUnionMember(unionType, type), " = x", child_level.toString(), ";");
|
|
654
697
|
});
|
|
655
698
|
}
|
|
656
|
-
else if (
|
|
699
|
+
else if (cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined) {
|
|
657
700
|
const level = 0;
|
|
658
701
|
const child_level = 1;
|
|
659
702
|
this.emitLine(cJSON.cType, " * x", child_level.toString(), " = hashtable_create(", this.hashtableSize, ", false);");
|
|
660
703
|
this.emitBlock(["if (NULL != x", child_level.toString(), ")"], () => {
|
|
661
704
|
this.emitLine("cJSON * e", child_level.toString(), " = NULL;");
|
|
662
|
-
this.emitBlock([
|
|
705
|
+
this.emitBlock([
|
|
706
|
+
"cJSON_ArrayForEach(e",
|
|
707
|
+
child_level.toString(),
|
|
708
|
+
", j",
|
|
709
|
+
level > 0 ? level.toString() : "",
|
|
710
|
+
")"
|
|
711
|
+
], () => {
|
|
663
712
|
const add = (cJSON, level, child_level) => {
|
|
664
713
|
if (cJSON.items.cjsonType === "cJSON_Array") {
|
|
665
714
|
/* Not supported */
|
|
@@ -667,20 +716,22 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
667
716
|
else if (cJSON.items.cjsonType === "cJSON_Map") {
|
|
668
717
|
/* Not supported */
|
|
669
718
|
}
|
|
670
|
-
else if (
|
|
719
|
+
else if (cJSON.items.cjsonType === "cJSON_Invalid" ||
|
|
720
|
+
cJSON.items.cjsonType === "cJSON_NULL") {
|
|
671
721
|
this.emitLine("hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, (", cJSON.items.cType, " *)0xDEADBEEF, sizeof(", cJSON.items.cType, " *));");
|
|
672
722
|
}
|
|
673
723
|
else if (cJSON.items.cjsonType === "cJSON_String") {
|
|
674
724
|
this.emitLine("hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, strdup(", cJSON.items.getValue, "(e", child_level.toString(), ")), sizeof(", cJSON.items.cType, " *));");
|
|
675
725
|
}
|
|
676
|
-
else if (
|
|
726
|
+
else if (cJSON.items.cjsonType === "cJSON_Object" ||
|
|
727
|
+
cJSON.items.cjsonType === "cJSON_Union") {
|
|
677
728
|
this.emitLine("hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, ", cJSON.items.getValue, "(e", child_level.toString(), "), sizeof(", cJSON.items.cType, " *));");
|
|
678
729
|
}
|
|
679
730
|
else {
|
|
680
|
-
this.emitLine(cJSON.items.cType, " * tmp",
|
|
681
|
-
this.emitBlock(["if (NULL != tmp",
|
|
682
|
-
this.emitLine("* tmp",
|
|
683
|
-
this.emitLine("hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, tmp",
|
|
731
|
+
this.emitLine(cJSON.items.cType, " * tmp", level > 0 ? level.toString() : "", " = cJSON_malloc(sizeof(", cJSON.items.cType, "));");
|
|
732
|
+
this.emitBlock(["if (NULL != tmp", level > 0 ? level.toString() : "", ")"], () => {
|
|
733
|
+
this.emitLine("* tmp", level > 0 ? level.toString() : "", " = ", cJSON.items.getValue, "(e", child_level.toString(), ");");
|
|
734
|
+
this.emitLine("hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, tmp", level > 0 ? level.toString() : "", ", sizeof(", cJSON.items.cType, " *));");
|
|
684
735
|
});
|
|
685
736
|
}
|
|
686
737
|
};
|
|
@@ -699,7 +750,7 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
699
750
|
this.emitLine("x->value.", this.nameForUnionMember(unionType, type), " = x", child_level.toString(), ";");
|
|
700
751
|
});
|
|
701
752
|
}
|
|
702
|
-
else if (
|
|
753
|
+
else if (cJSON.cjsonType === "cJSON_Invalid" || cJSON.cjsonType === "cJSON_NULL") {
|
|
703
754
|
this.emitLine("x->value.", this.nameForUnionMember(unionType, type), " = (", cJSON.cType, " *)0xDEADBEEF;");
|
|
704
755
|
}
|
|
705
756
|
else if (cJSON.cjsonType === "cJSON_String") {
|
|
@@ -728,13 +779,13 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
728
779
|
}
|
|
729
780
|
for (const type of nonNulls) {
|
|
730
781
|
const cJSON = this.quicktypeTypeToCJSON(type, false);
|
|
731
|
-
this.emitBlock([
|
|
732
|
-
if (
|
|
782
|
+
this.emitBlock([onFirst === true ? "if (" : "else if (", cJSON.cjsonType, " == x->type)"], () => {
|
|
783
|
+
if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) {
|
|
733
784
|
const level = 0;
|
|
734
785
|
const child_level = 1;
|
|
735
786
|
this.emitLine("cJSON * j", child_level.toString(), " = ", cJSON.createObject, "();");
|
|
736
787
|
this.emitBlock(["if (NULL != j", child_level.toString(), ")"], () => {
|
|
737
|
-
this.emitLine(cJSON.items.cType, " * x", child_level.toString(), " = list_get_head(x",
|
|
788
|
+
this.emitLine(cJSON.items.cType, " * x", child_level.toString(), " = list_get_head(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember(unionType, type), ");");
|
|
738
789
|
this.emitBlock(["while (NULL != x", child_level.toString(), ")"], () => {
|
|
739
790
|
const add = (cJSON, child_level) => {
|
|
740
791
|
if (cJSON.items.cjsonType === "cJSON_Array") {
|
|
@@ -749,7 +800,9 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
749
800
|
else if (cJSON.items.cjsonType === "cJSON_NULL") {
|
|
750
801
|
this.emitLine("cJSON_AddItemToArray(j", child_level.toString(), ", ", cJSON.items.createObject, "());");
|
|
751
802
|
}
|
|
752
|
-
else if (
|
|
803
|
+
else if (cJSON.items.cjsonType === "cJSON_String" ||
|
|
804
|
+
cJSON.items.cjsonType === "cJSON_Object" ||
|
|
805
|
+
cJSON.items.cjsonType === "cJSON_Union") {
|
|
753
806
|
this.emitLine("cJSON_AddItemToArray(j", child_level.toString(), ", ", cJSON.items.createObject, "(x", child_level.toString(), "));");
|
|
754
807
|
}
|
|
755
808
|
else {
|
|
@@ -767,21 +820,31 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
767
820
|
else {
|
|
768
821
|
add(cJSON, child_level);
|
|
769
822
|
}
|
|
770
|
-
this.emitLine("x", child_level.toString(), " = list_get_next(x",
|
|
823
|
+
this.emitLine("x", child_level.toString(), " = list_get_next(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember(unionType, type), ");");
|
|
771
824
|
});
|
|
772
825
|
this.emitLine("j = j", child_level.toString(), ";");
|
|
773
826
|
});
|
|
774
827
|
}
|
|
775
|
-
else if (
|
|
828
|
+
else if (cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined) {
|
|
776
829
|
const level = 0;
|
|
777
830
|
const child_level = 1;
|
|
778
831
|
this.emitLine("cJSON * j", child_level.toString(), " = ", cJSON.createObject, "();");
|
|
779
832
|
this.emitBlock(["if (NULL != j", child_level.toString(), ")"], () => {
|
|
780
833
|
this.emitLine("char **keys", child_level.toString(), " = NULL;");
|
|
781
|
-
this.emitLine("size_t count", child_level.toString(), " = hashtable_get_keys(x",
|
|
834
|
+
this.emitLine("size_t count", child_level.toString(), " = hashtable_get_keys(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember(unionType, type), ", &keys", child_level.toString(), ");");
|
|
782
835
|
this.emitBlock(["if (NULL != keys", child_level.toString(), ")"], () => {
|
|
783
|
-
this.emitBlock([
|
|
784
|
-
|
|
836
|
+
this.emitBlock([
|
|
837
|
+
"for (size_t index",
|
|
838
|
+
child_level.toString(),
|
|
839
|
+
" = 0; index",
|
|
840
|
+
child_level.toString(),
|
|
841
|
+
" < count",
|
|
842
|
+
child_level.toString(),
|
|
843
|
+
"; index",
|
|
844
|
+
child_level.toString(),
|
|
845
|
+
"++)"
|
|
846
|
+
], () => {
|
|
847
|
+
this.emitLine(cJSON.items.cType, " *x", child_level.toString(), " = hashtable_lookup(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember(unionType, type), ", keys", child_level.toString(), "[index", child_level.toString(), "]);");
|
|
785
848
|
const add = (cJSON, child_level) => {
|
|
786
849
|
if (cJSON.items.cjsonType === "cJSON_Array") {
|
|
787
850
|
/* Not supported */
|
|
@@ -795,7 +858,9 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
795
858
|
else if (cJSON.items.cjsonType === "cJSON_NULL") {
|
|
796
859
|
this.emitLine(cJSON.addToObject, "(j", child_level.toString(), ", keys", child_level.toString(), "[index", child_level.toString(), "], ", cJSON.items.createObject, "());");
|
|
797
860
|
}
|
|
798
|
-
else if (
|
|
861
|
+
else if (cJSON.items.cjsonType === "cJSON_String" ||
|
|
862
|
+
cJSON.items.cjsonType === "cJSON_Object" ||
|
|
863
|
+
cJSON.items.cjsonType === "cJSON_Union") {
|
|
799
864
|
this.emitLine(cJSON.addToObject, "(j", child_level.toString(), ", keys", child_level.toString(), "[index", child_level.toString(), "], ", cJSON.items.createObject, "(x", child_level.toString(), "));");
|
|
800
865
|
}
|
|
801
866
|
else {
|
|
@@ -803,7 +868,11 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
803
868
|
}
|
|
804
869
|
};
|
|
805
870
|
if (cJSON.items.isNullable) {
|
|
806
|
-
this.emitBlock([
|
|
871
|
+
this.emitBlock([
|
|
872
|
+
"if ((void *)0xDEADBEEF != x",
|
|
873
|
+
child_level.toString(),
|
|
874
|
+
")"
|
|
875
|
+
], () => {
|
|
807
876
|
add(cJSON, child_level);
|
|
808
877
|
});
|
|
809
878
|
this.emitBlock(["else"], () => {
|
|
@@ -841,12 +910,18 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
841
910
|
let onFirst = true;
|
|
842
911
|
for (const type of nonNulls) {
|
|
843
912
|
const cJSON = this.quicktypeTypeToCJSON(type, false);
|
|
844
|
-
this.emitBlock([
|
|
845
|
-
if (
|
|
913
|
+
this.emitBlock([onFirst === true ? "if (" : "else if (", cJSON.cjsonType, " == x->type)"], () => {
|
|
914
|
+
if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) {
|
|
846
915
|
const level = 0;
|
|
847
916
|
const child_level = 1;
|
|
848
|
-
this.emitBlock([
|
|
849
|
-
|
|
917
|
+
this.emitBlock([
|
|
918
|
+
"if (NULL != x",
|
|
919
|
+
level > 0 ? level.toString() : "",
|
|
920
|
+
"->value.",
|
|
921
|
+
this.nameForUnionMember(unionType, type),
|
|
922
|
+
")"
|
|
923
|
+
], () => {
|
|
924
|
+
this.emitLine(cJSON.items.cType, " * x", child_level.toString(), " = list_get_head(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember(unionType, type), ");");
|
|
850
925
|
this.emitBlock(["while (NULL != x", child_level.toString(), ")"], () => {
|
|
851
926
|
if (cJSON.items.cjsonType === "cJSON_Array") {
|
|
852
927
|
/* Not supported */
|
|
@@ -854,7 +929,8 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
854
929
|
else if (cJSON.items.cjsonType === "cJSON_Map") {
|
|
855
930
|
/* Not supported */
|
|
856
931
|
}
|
|
857
|
-
else if (
|
|
932
|
+
else if (cJSON.items.cjsonType === "cJSON_Invalid" ||
|
|
933
|
+
cJSON.items.cjsonType === "cJSON_NULL") {
|
|
858
934
|
/* Nothing to do */
|
|
859
935
|
}
|
|
860
936
|
else {
|
|
@@ -867,20 +943,36 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
867
943
|
this.emitLine(cJSON.items.deleteType, "(x", child_level.toString(), ");");
|
|
868
944
|
}
|
|
869
945
|
}
|
|
870
|
-
this.emitLine("x", child_level.toString(), " = list_get_next(x",
|
|
946
|
+
this.emitLine("x", child_level.toString(), " = list_get_next(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember(unionType, type), ");");
|
|
871
947
|
});
|
|
872
|
-
this.emitLine(cJSON.deleteType, "(x",
|
|
948
|
+
this.emitLine(cJSON.deleteType, "(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember(unionType, type), ");");
|
|
873
949
|
});
|
|
874
950
|
}
|
|
875
|
-
else if (
|
|
951
|
+
else if (cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined) {
|
|
876
952
|
const level = 0;
|
|
877
953
|
const child_level = 1;
|
|
878
|
-
this.emitBlock([
|
|
954
|
+
this.emitBlock([
|
|
955
|
+
"if (NULL != x",
|
|
956
|
+
level > 0 ? level.toString() : "",
|
|
957
|
+
"->value.",
|
|
958
|
+
this.nameForUnionMember(unionType, type),
|
|
959
|
+
")"
|
|
960
|
+
], () => {
|
|
879
961
|
this.emitLine("char **keys", child_level.toString(), " = NULL;");
|
|
880
|
-
this.emitLine("size_t count", child_level.toString(), " = hashtable_get_keys(x",
|
|
962
|
+
this.emitLine("size_t count", child_level.toString(), " = hashtable_get_keys(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember(unionType, type), ", &keys", child_level.toString(), ");");
|
|
881
963
|
this.emitBlock(["if (NULL != keys", child_level.toString(), ")"], () => {
|
|
882
|
-
this.emitBlock([
|
|
883
|
-
|
|
964
|
+
this.emitBlock([
|
|
965
|
+
"for (size_t index",
|
|
966
|
+
child_level.toString(),
|
|
967
|
+
" = 0; index",
|
|
968
|
+
child_level.toString(),
|
|
969
|
+
" < count",
|
|
970
|
+
child_level.toString(),
|
|
971
|
+
"; index",
|
|
972
|
+
child_level.toString(),
|
|
973
|
+
"++)"
|
|
974
|
+
], () => {
|
|
975
|
+
this.emitLine(cJSON.items.cType, " *x", child_level.toString(), " = hashtable_lookup(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember(unionType, type), ", keys", child_level.toString(), "[index", child_level.toString(), "]);");
|
|
884
976
|
this.emitBlock(["if (NULL != x", child_level.toString(), ")"], () => {
|
|
885
977
|
if (cJSON.items.cjsonType === "cJSON_Array") {
|
|
886
978
|
/* Not supported */
|
|
@@ -888,12 +980,17 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
888
980
|
else if (cJSON.items.cjsonType === "cJSON_Map") {
|
|
889
981
|
/* Not supported */
|
|
890
982
|
}
|
|
891
|
-
else if (
|
|
983
|
+
else if (cJSON.items.cjsonType === "cJSON_Invalid" ||
|
|
984
|
+
cJSON.items.cjsonType === "cJSON_NULL") {
|
|
892
985
|
/* Nothing to do */
|
|
893
986
|
}
|
|
894
987
|
else {
|
|
895
988
|
if (cJSON.items.isNullable) {
|
|
896
|
-
this.emitBlock([
|
|
989
|
+
this.emitBlock([
|
|
990
|
+
"if ((void *)0xDEADBEEF != x",
|
|
991
|
+
child_level.toString(),
|
|
992
|
+
")"
|
|
993
|
+
], () => {
|
|
897
994
|
this.emitLine(cJSON.items.deleteType, "(x", child_level.toString(), ");");
|
|
898
995
|
});
|
|
899
996
|
}
|
|
@@ -905,13 +1002,15 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
905
1002
|
});
|
|
906
1003
|
this.emitLine("cJSON_free(keys", child_level.toString(), ");");
|
|
907
1004
|
});
|
|
908
|
-
this.emitLine(cJSON.deleteType, "(x",
|
|
1005
|
+
this.emitLine(cJSON.deleteType, "(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember(unionType, type), ");");
|
|
909
1006
|
});
|
|
910
1007
|
}
|
|
911
|
-
else if (
|
|
1008
|
+
else if (cJSON.cjsonType === "cJSON_Invalid" || cJSON.cjsonType === "cJSON_NULL") {
|
|
912
1009
|
/* Nothing to do */
|
|
913
1010
|
}
|
|
914
|
-
else if (
|
|
1011
|
+
else if (cJSON.cjsonType === "cJSON_String" ||
|
|
1012
|
+
cJSON.cjsonType === "cJSON_Object" ||
|
|
1013
|
+
cJSON.cjsonType === "cJSON_Union") {
|
|
915
1014
|
this.emitLine(cJSON.deleteType, "(x->value.", this.nameForUnionMember(unionType, type), ");");
|
|
916
1015
|
}
|
|
917
1016
|
else {
|
|
@@ -958,7 +1057,7 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
958
1057
|
this.forEachClassProperty(classType, "none", (name, jsonName, property) => {
|
|
959
1058
|
this.emitDescription(this.descriptionForClassProperty(classType, jsonName));
|
|
960
1059
|
const cJSON = this.quicktypeTypeToCJSON(property.type, property.isOptional);
|
|
961
|
-
this.emitLine(cJSON.cType,
|
|
1060
|
+
this.emitLine(cJSON.cType, cJSON.optionalQualifier !== "" ? " " : "", cJSON.optionalQualifier, " ", name, ";");
|
|
962
1061
|
});
|
|
963
1062
|
}, "", true);
|
|
964
1063
|
this.ensureBlankLine();
|
|
@@ -1018,20 +1117,22 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1018
1117
|
else if (cJSON.cjsonType === "cJSON_Map") {
|
|
1019
1118
|
/* Not supported */
|
|
1020
1119
|
}
|
|
1021
|
-
else if (
|
|
1120
|
+
else if (cJSON.cjsonType === "cJSON_Invalid" ||
|
|
1121
|
+
cJSON.cjsonType === "cJSON_NULL") {
|
|
1022
1122
|
this.emitLine("list_add_tail(x", child_level.toString(), ", (", cJSON.cType, " *)0xDEADBEEF, sizeof(", cJSON.cType, " *));");
|
|
1023
1123
|
}
|
|
1024
1124
|
else if (cJSON.cjsonType === "cJSON_String") {
|
|
1025
1125
|
this.emitLine("list_add_tail(x", child_level.toString(), ", strdup(", cJSON.getValue, "(e", child_level.toString(), ")), sizeof(", cJSON.cType, " *));");
|
|
1026
1126
|
}
|
|
1027
|
-
else if (
|
|
1127
|
+
else if (cJSON.cjsonType === "cJSON_Object" ||
|
|
1128
|
+
cJSON.cjsonType === "cJSON_Union") {
|
|
1028
1129
|
this.emitLine("list_add_tail(x", child_level.toString(), ", ", cJSON.getValue, "(e", child_level.toString(), "), sizeof(", cJSON.cType, " *));");
|
|
1029
1130
|
}
|
|
1030
1131
|
else {
|
|
1031
|
-
this.emitLine(cJSON.cType, " * tmp",
|
|
1032
|
-
this.emitBlock(["if (NULL != tmp",
|
|
1033
|
-
this.emitLine("* tmp",
|
|
1034
|
-
this.emitLine("list_add_tail(x", child_level.toString(), ", tmp",
|
|
1132
|
+
this.emitLine(cJSON.cType, " * tmp", level > 0 ? level.toString() : "", " = cJSON_malloc(sizeof(", cJSON.cType, "));");
|
|
1133
|
+
this.emitBlock(["if (NULL != tmp", level > 0 ? level.toString() : "", ")"], () => {
|
|
1134
|
+
this.emitLine("* tmp", level > 0 ? level.toString() : "", " = ", cJSON.getValue, "(e", child_level.toString(), ");");
|
|
1135
|
+
this.emitLine("list_add_tail(x", child_level.toString(), ", tmp", level > 0 ? level.toString() : "", ", sizeof(", cJSON.cType, " *));");
|
|
1035
1136
|
});
|
|
1036
1137
|
}
|
|
1037
1138
|
});
|
|
@@ -1040,14 +1141,38 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1040
1141
|
else if (type instanceof Type_1.ClassType) {
|
|
1041
1142
|
this.forEachClassProperty(type, "none", (name, jsonName, property) => {
|
|
1042
1143
|
const cJSON = this.quicktypeTypeToCJSON(property.type, property.isOptional);
|
|
1043
|
-
this.emitBlock(
|
|
1044
|
-
|
|
1144
|
+
this.emitBlock(!cJSON.isNullable
|
|
1145
|
+
? [
|
|
1146
|
+
"if (cJSON_HasObjectItem(j",
|
|
1147
|
+
level > 0 ? level.toString() : "",
|
|
1148
|
+
', "',
|
|
1149
|
+
jsonName,
|
|
1150
|
+
'"))'
|
|
1151
|
+
]
|
|
1152
|
+
: [
|
|
1153
|
+
"if ((cJSON_HasObjectItem(j",
|
|
1154
|
+
level > 0 ? level.toString() : "",
|
|
1155
|
+
', "',
|
|
1156
|
+
jsonName,
|
|
1157
|
+
'")) && (!cJSON_IsNull(cJSON_GetObjectItemCaseSensitive(j',
|
|
1158
|
+
level > 0 ? level.toString() : "",
|
|
1159
|
+
', "',
|
|
1160
|
+
jsonName,
|
|
1161
|
+
'"))))'
|
|
1162
|
+
], () => {
|
|
1163
|
+
if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) {
|
|
1045
1164
|
const child_level = level + 1;
|
|
1046
1165
|
this.emitLine(cJSON.cType, " * x", child_level.toString(), " = list_create(false, NULL);");
|
|
1047
1166
|
this.emitBlock(["if (NULL != x", child_level.toString(), ")"], () => {
|
|
1048
1167
|
this.emitLine("cJSON * e", child_level.toString(), " = NULL;");
|
|
1049
|
-
this.emitLine("cJSON * j", child_level.toString(), " = cJSON_GetObjectItemCaseSensitive(j",
|
|
1050
|
-
this.emitBlock([
|
|
1168
|
+
this.emitLine("cJSON * j", child_level.toString(), " = cJSON_GetObjectItemCaseSensitive(j", level > 0 ? level.toString() : "", ', "', jsonName, '");');
|
|
1169
|
+
this.emitBlock([
|
|
1170
|
+
"cJSON_ArrayForEach(e",
|
|
1171
|
+
child_level.toString(),
|
|
1172
|
+
", j",
|
|
1173
|
+
child_level.toString(),
|
|
1174
|
+
")"
|
|
1175
|
+
], () => {
|
|
1051
1176
|
const add = (type, cJSON, level, child_level) => {
|
|
1052
1177
|
if (cJSON.items.cjsonType === "cJSON_Array") {
|
|
1053
1178
|
if (type instanceof Type_1.ArrayType) {
|
|
@@ -1062,25 +1187,35 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1062
1187
|
else if (cJSON.items.cjsonType === "cJSON_Map") {
|
|
1063
1188
|
/* Not supported */
|
|
1064
1189
|
}
|
|
1065
|
-
else if (
|
|
1190
|
+
else if (cJSON.items.cjsonType === "cJSON_Invalid" ||
|
|
1191
|
+
cJSON.items.cjsonType === "cJSON_NULL") {
|
|
1066
1192
|
this.emitLine("list_add_tail(x", child_level.toString(), ", (", cJSON.items.cType, " *)0xDEADBEEF, sizeof(", cJSON.items.cType, " *));");
|
|
1067
1193
|
}
|
|
1068
1194
|
else if (cJSON.items.cjsonType === "cJSON_String") {
|
|
1069
1195
|
this.emitLine("list_add_tail(x", child_level.toString(), ", strdup(", cJSON.items.getValue, "(e", child_level.toString(), ")), sizeof(", cJSON.items.cType, " *));");
|
|
1070
1196
|
}
|
|
1071
|
-
else if (
|
|
1197
|
+
else if (cJSON.items.cjsonType === "cJSON_Object" ||
|
|
1198
|
+
cJSON.items.cjsonType === "cJSON_Union") {
|
|
1072
1199
|
this.emitLine("list_add_tail(x", child_level.toString(), ", ", cJSON.items.getValue, "(e", child_level.toString(), "), sizeof(", cJSON.items.cType, " *));");
|
|
1073
1200
|
}
|
|
1074
1201
|
else {
|
|
1075
|
-
this.emitLine(cJSON.items.cType, " * tmp",
|
|
1076
|
-
this.emitBlock([
|
|
1077
|
-
|
|
1078
|
-
|
|
1202
|
+
this.emitLine(cJSON.items.cType, " * tmp", level > 0 ? level.toString() : "", " = cJSON_malloc(sizeof(", cJSON.items.cType, "));");
|
|
1203
|
+
this.emitBlock([
|
|
1204
|
+
"if (NULL != tmp",
|
|
1205
|
+
level > 0 ? level.toString() : "",
|
|
1206
|
+
")"
|
|
1207
|
+
], () => {
|
|
1208
|
+
this.emitLine("* tmp", level > 0 ? level.toString() : "", " = ", cJSON.items.getValue, "(e", child_level.toString(), ");");
|
|
1209
|
+
this.emitLine("list_add_tail(x", child_level.toString(), ", tmp", level > 0 ? level.toString() : "", ", sizeof(", cJSON.items.cType, " *));");
|
|
1079
1210
|
});
|
|
1080
1211
|
}
|
|
1081
1212
|
};
|
|
1082
1213
|
if (cJSON.items.isNullable) {
|
|
1083
|
-
this.emitBlock([
|
|
1214
|
+
this.emitBlock([
|
|
1215
|
+
"if (!cJSON_IsNull(e",
|
|
1216
|
+
child_level.toString(),
|
|
1217
|
+
"))"
|
|
1218
|
+
], () => {
|
|
1084
1219
|
add(property.type, cJSON, level, child_level);
|
|
1085
1220
|
});
|
|
1086
1221
|
this.emitBlock(["else"], () => {
|
|
@@ -1091,16 +1226,22 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1091
1226
|
add(property.type, cJSON, level, child_level);
|
|
1092
1227
|
}
|
|
1093
1228
|
});
|
|
1094
|
-
this.emitLine("x",
|
|
1229
|
+
this.emitLine("x", level > 0 ? level.toString() : "", "->", name, " = x", child_level.toString(), ";");
|
|
1095
1230
|
});
|
|
1096
1231
|
}
|
|
1097
|
-
else if (
|
|
1232
|
+
else if (cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined) {
|
|
1098
1233
|
const child_level = level + 1;
|
|
1099
1234
|
this.emitLine(cJSON.cType, " * x", child_level.toString(), " = hashtable_create(", this.hashtableSize, ", false);");
|
|
1100
1235
|
this.emitBlock(["if (NULL != x", child_level.toString(), ")"], () => {
|
|
1101
1236
|
this.emitLine("cJSON * e", child_level.toString(), " = NULL;");
|
|
1102
|
-
this.emitLine("cJSON * j", child_level.toString(), " = cJSON_GetObjectItemCaseSensitive(j",
|
|
1103
|
-
this.emitBlock([
|
|
1237
|
+
this.emitLine("cJSON * j", child_level.toString(), " = cJSON_GetObjectItemCaseSensitive(j", level > 0 ? level.toString() : "", ', "', jsonName, '");');
|
|
1238
|
+
this.emitBlock([
|
|
1239
|
+
"cJSON_ArrayForEach(e",
|
|
1240
|
+
child_level.toString(),
|
|
1241
|
+
", j",
|
|
1242
|
+
child_level.toString(),
|
|
1243
|
+
")"
|
|
1244
|
+
], () => {
|
|
1104
1245
|
const add = (type, cJSON, level, child_level) => {
|
|
1105
1246
|
if (cJSON.items.cjsonType === "cJSON_Array") {
|
|
1106
1247
|
if (type instanceof Type_1.MapType) {
|
|
@@ -1115,25 +1256,35 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1115
1256
|
else if (cJSON.items.cjsonType === "cJSON_Map") {
|
|
1116
1257
|
/* Not supported */
|
|
1117
1258
|
}
|
|
1118
|
-
else if (
|
|
1259
|
+
else if (cJSON.items.cjsonType === "cJSON_Invalid" ||
|
|
1260
|
+
cJSON.items.cjsonType === "cJSON_NULL") {
|
|
1119
1261
|
this.emitLine("hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, (", cJSON.items.cType, " *)0xDEADBEEF, sizeof(", cJSON.items.cType, " *));");
|
|
1120
1262
|
}
|
|
1121
1263
|
else if (cJSON.items.cjsonType === "cJSON_String") {
|
|
1122
1264
|
this.emitLine("hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, strdup(", cJSON.items.getValue, "(e", child_level.toString(), ")), sizeof(", cJSON.items.cType, " *));");
|
|
1123
1265
|
}
|
|
1124
|
-
else if (
|
|
1266
|
+
else if (cJSON.items.cjsonType === "cJSON_Object" ||
|
|
1267
|
+
cJSON.items.cjsonType === "cJSON_Union") {
|
|
1125
1268
|
this.emitLine("hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, ", cJSON.items.getValue, "(e", child_level.toString(), "), sizeof(", cJSON.items.cType, " *));");
|
|
1126
1269
|
}
|
|
1127
1270
|
else {
|
|
1128
|
-
this.emitLine(cJSON.items.cType, " * tmp",
|
|
1129
|
-
this.emitBlock([
|
|
1130
|
-
|
|
1131
|
-
|
|
1271
|
+
this.emitLine(cJSON.items.cType, " * tmp", level > 0 ? level.toString() : "", " = cJSON_malloc(sizeof(", cJSON.items.cType, "));");
|
|
1272
|
+
this.emitBlock([
|
|
1273
|
+
"if (NULL != tmp",
|
|
1274
|
+
level > 0 ? level.toString() : "",
|
|
1275
|
+
")"
|
|
1276
|
+
], () => {
|
|
1277
|
+
this.emitLine("* tmp", level > 0 ? level.toString() : "", " = ", cJSON.items.getValue, "(e", child_level.toString(), ");");
|
|
1278
|
+
this.emitLine("hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, tmp", level > 0 ? level.toString() : "", ", sizeof(", cJSON.items.cType, " *));");
|
|
1132
1279
|
});
|
|
1133
1280
|
}
|
|
1134
1281
|
};
|
|
1135
1282
|
if (cJSON.items.isNullable) {
|
|
1136
|
-
this.emitBlock([
|
|
1283
|
+
this.emitBlock([
|
|
1284
|
+
"if (!cJSON_IsNull(e",
|
|
1285
|
+
child_level.toString(),
|
|
1286
|
+
"))"
|
|
1287
|
+
], () => {
|
|
1137
1288
|
add(property.type, cJSON, level, child_level);
|
|
1138
1289
|
});
|
|
1139
1290
|
this.emitBlock(["else"], () => {
|
|
@@ -1144,49 +1295,68 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1144
1295
|
add(property.type, cJSON, level, child_level);
|
|
1145
1296
|
}
|
|
1146
1297
|
});
|
|
1147
|
-
this.emitLine("x",
|
|
1298
|
+
this.emitLine("x", level > 0 ? level.toString() : "", "->", name, " = x", child_level.toString(), ";");
|
|
1148
1299
|
});
|
|
1149
1300
|
}
|
|
1150
|
-
else if (
|
|
1151
|
-
|
|
1301
|
+
else if (cJSON.cjsonType === "cJSON_Invalid" ||
|
|
1302
|
+
cJSON.cjsonType === "cJSON_NULL") {
|
|
1303
|
+
this.emitLine("x", level > 0 ? level.toString() : "", "->", name, " = (", cJSON.cType, " *)0xDEADBEEF;");
|
|
1152
1304
|
}
|
|
1153
1305
|
else if (cJSON.cjsonType === "cJSON_String") {
|
|
1154
|
-
this.emitLine("x",
|
|
1306
|
+
this.emitLine("x", level > 0 ? level.toString() : "", "->", name, " = strdup(", cJSON.getValue, "(cJSON_GetObjectItemCaseSensitive(j", level > 0 ? level.toString() : "", ', "', jsonName, '")));');
|
|
1155
1307
|
}
|
|
1156
|
-
else if (
|
|
1157
|
-
|
|
1308
|
+
else if (cJSON.cjsonType === "cJSON_Object" ||
|
|
1309
|
+
cJSON.cjsonType === "cJSON_Union") {
|
|
1310
|
+
this.emitLine("x", level > 0 ? level.toString() : "", "->", name, " = ", cJSON.getValue, "(cJSON_GetObjectItemCaseSensitive(j", level > 0 ? level.toString() : "", ', "', jsonName, '"));');
|
|
1158
1311
|
}
|
|
1159
1312
|
else {
|
|
1160
|
-
if (
|
|
1161
|
-
this.emitBlock([
|
|
1162
|
-
|
|
1313
|
+
if (property.isOptional || cJSON.isNullable) {
|
|
1314
|
+
this.emitBlock([
|
|
1315
|
+
"if (NULL != (x",
|
|
1316
|
+
level > 0 ? level.toString() : "",
|
|
1317
|
+
"->",
|
|
1318
|
+
name,
|
|
1319
|
+
" = cJSON_malloc(sizeof(",
|
|
1320
|
+
cJSON.cType,
|
|
1321
|
+
"))))"
|
|
1322
|
+
], () => {
|
|
1323
|
+
this.emitLine("*x", level > 0 ? level.toString() : "", "->", name, " = ", cJSON.getValue, "(cJSON_GetObjectItemCaseSensitive(j", level > 0 ? level.toString() : "", ', "', jsonName, '"));');
|
|
1163
1324
|
});
|
|
1164
1325
|
}
|
|
1165
1326
|
else {
|
|
1166
|
-
this.emitLine("x",
|
|
1327
|
+
this.emitLine("x", level > 0 ? level.toString() : "", "->", name, " = ", cJSON.getValue, "(cJSON_GetObjectItemCaseSensitive(j", level > 0 ? level.toString() : "", ', "', jsonName, '"));');
|
|
1167
1328
|
}
|
|
1168
1329
|
}
|
|
1169
1330
|
});
|
|
1170
|
-
if (
|
|
1331
|
+
if (!property.isOptional && !cJSON.isNullable) {
|
|
1171
1332
|
if (cJSON.cjsonType === "cJSON_Array") {
|
|
1172
1333
|
this.emitBlock(["else"], () => {
|
|
1173
|
-
this.emitLine("x",
|
|
1334
|
+
this.emitLine("x", level > 0 ? level.toString() : "", "->", name, " = list_create(false, NULL);");
|
|
1174
1335
|
});
|
|
1175
1336
|
}
|
|
1176
1337
|
else if (cJSON.cjsonType === "cJSON_Map") {
|
|
1177
1338
|
this.emitBlock(["else"], () => {
|
|
1178
|
-
this.emitLine("x",
|
|
1339
|
+
this.emitLine("x", level > 0 ? level.toString() : "", "->", name, " = hashtable_create(", this.hashtableSize, ", false);");
|
|
1179
1340
|
});
|
|
1180
1341
|
}
|
|
1181
|
-
else if (
|
|
1342
|
+
else if (cJSON.cjsonType === "cJSON_Invalid" ||
|
|
1343
|
+
cJSON.cjsonType === "cJSON_NULL") {
|
|
1182
1344
|
this.emitBlock(["else"], () => {
|
|
1183
|
-
this.emitLine("x",
|
|
1345
|
+
this.emitLine("x", level > 0 ? level.toString() : "", "->", name, " = (", cJSON.cType, " *)0xDEADBEEF;");
|
|
1184
1346
|
});
|
|
1185
1347
|
}
|
|
1186
1348
|
else if (cJSON.cjsonType === "cJSON_String") {
|
|
1187
1349
|
this.emitBlock(["else"], () => {
|
|
1188
|
-
this.emitBlock([
|
|
1189
|
-
|
|
1350
|
+
this.emitBlock([
|
|
1351
|
+
"if (NULL != (x",
|
|
1352
|
+
level > 0 ? level.toString() : "",
|
|
1353
|
+
"->",
|
|
1354
|
+
name,
|
|
1355
|
+
" = cJSON_malloc(sizeof(",
|
|
1356
|
+
cJSON.cType,
|
|
1357
|
+
"))))"
|
|
1358
|
+
], () => {
|
|
1359
|
+
this.emitLine("x", level > 0 ? level.toString() : "", "->", name, "[0] = '\\0';");
|
|
1190
1360
|
});
|
|
1191
1361
|
});
|
|
1192
1362
|
}
|
|
@@ -1230,7 +1400,9 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1230
1400
|
else if (cJSON.cjsonType === "cJSON_NULL") {
|
|
1231
1401
|
this.emitLine("cJSON_AddItemToArray(j", child_level.toString(), ", ", cJSON.createObject, "());");
|
|
1232
1402
|
}
|
|
1233
|
-
else if (
|
|
1403
|
+
else if (cJSON.cjsonType === "cJSON_String" ||
|
|
1404
|
+
cJSON.cjsonType === "cJSON_Object" ||
|
|
1405
|
+
cJSON.cjsonType === "cJSON_Union") {
|
|
1234
1406
|
this.emitLine("cJSON_AddItemToArray(j", child_level.toString(), ", ", cJSON.createObject, "(x", child_level.toString(), "));");
|
|
1235
1407
|
}
|
|
1236
1408
|
else {
|
|
@@ -1243,12 +1415,12 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1243
1415
|
else if (type instanceof Type_1.ClassType) {
|
|
1244
1416
|
this.forEachClassProperty(type, "none", (name, jsonName, property) => {
|
|
1245
1417
|
const cJSON = this.quicktypeTypeToCJSON(property.type, property.isOptional);
|
|
1246
|
-
if (
|
|
1418
|
+
if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) {
|
|
1247
1419
|
const child_level = level + 1;
|
|
1248
|
-
this.emitBlock(["if (NULL != x",
|
|
1249
|
-
this.emitLine("cJSON * j", child_level.toString(), " = cJSON_AddArrayToObject(j",
|
|
1420
|
+
this.emitBlock(["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], () => {
|
|
1421
|
+
this.emitLine("cJSON * j", child_level.toString(), " = cJSON_AddArrayToObject(j", level > 0 ? level.toString() : "", ', "', jsonName, '");');
|
|
1250
1422
|
this.emitBlock(["if (NULL != j", child_level.toString(), ")"], () => {
|
|
1251
|
-
this.emitLine(cJSON.items.cType, " * x", child_level.toString(), " = list_get_head(x",
|
|
1423
|
+
this.emitLine(cJSON.items.cType, " * x", child_level.toString(), " = list_get_head(x", level > 0 ? level.toString() : "", "->", name, ");");
|
|
1252
1424
|
this.emitBlock(["while (NULL != x", child_level.toString(), ")"], () => {
|
|
1253
1425
|
const add = (type, cJSON, child_level) => {
|
|
1254
1426
|
if (cJSON.items.cjsonType === "cJSON_Array") {
|
|
@@ -1270,7 +1442,9 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1270
1442
|
else if (cJSON.items.cjsonType === "cJSON_NULL") {
|
|
1271
1443
|
this.emitLine("cJSON_AddItemToArray(j", child_level.toString(), ", ", cJSON.items.createObject, "());");
|
|
1272
1444
|
}
|
|
1273
|
-
else if (
|
|
1445
|
+
else if (cJSON.items.cjsonType === "cJSON_String" ||
|
|
1446
|
+
cJSON.items.cjsonType === "cJSON_Object" ||
|
|
1447
|
+
cJSON.items.cjsonType === "cJSON_Union") {
|
|
1274
1448
|
this.emitLine("cJSON_AddItemToArray(j", child_level.toString(), ", ", cJSON.items.createObject, "(x", child_level.toString(), "));");
|
|
1275
1449
|
}
|
|
1276
1450
|
else {
|
|
@@ -1278,7 +1452,11 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1278
1452
|
}
|
|
1279
1453
|
};
|
|
1280
1454
|
if (cJSON.items.isNullable) {
|
|
1281
|
-
this.emitBlock([
|
|
1455
|
+
this.emitBlock([
|
|
1456
|
+
"if ((void *)0xDEADBEEF != x",
|
|
1457
|
+
child_level.toString(),
|
|
1458
|
+
")"
|
|
1459
|
+
], () => {
|
|
1282
1460
|
add(property.type, cJSON, child_level);
|
|
1283
1461
|
});
|
|
1284
1462
|
this.emitBlock(["else"], () => {
|
|
@@ -1288,21 +1466,31 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1288
1466
|
else {
|
|
1289
1467
|
add(property.type, cJSON, child_level);
|
|
1290
1468
|
}
|
|
1291
|
-
this.emitLine("x", child_level.toString(), " = list_get_next(x",
|
|
1469
|
+
this.emitLine("x", child_level.toString(), " = list_get_next(x", level > 0 ? level.toString() : "", "->", name, ");");
|
|
1292
1470
|
});
|
|
1293
1471
|
});
|
|
1294
1472
|
});
|
|
1295
1473
|
}
|
|
1296
|
-
else if (
|
|
1474
|
+
else if (cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined) {
|
|
1297
1475
|
const child_level = level + 1;
|
|
1298
|
-
this.emitBlock(["if (NULL != x",
|
|
1476
|
+
this.emitBlock(["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], () => {
|
|
1299
1477
|
this.emitLine("cJSON * j", child_level.toString(), " = ", cJSON.createObject, "();");
|
|
1300
1478
|
this.emitBlock(["if (NULL != j", child_level.toString(), ")"], () => {
|
|
1301
1479
|
this.emitLine("char **keys", child_level.toString(), " = NULL;");
|
|
1302
|
-
this.emitLine("size_t count", child_level.toString(), " = hashtable_get_keys(x",
|
|
1480
|
+
this.emitLine("size_t count", child_level.toString(), " = hashtable_get_keys(x", level > 0 ? level.toString() : "", "->", name, ", &keys", child_level.toString(), ");");
|
|
1303
1481
|
this.emitBlock(["if (NULL != keys", child_level.toString(), ")"], () => {
|
|
1304
|
-
this.emitBlock([
|
|
1305
|
-
|
|
1482
|
+
this.emitBlock([
|
|
1483
|
+
"for (size_t index",
|
|
1484
|
+
child_level.toString(),
|
|
1485
|
+
" = 0; index",
|
|
1486
|
+
child_level.toString(),
|
|
1487
|
+
" < count",
|
|
1488
|
+
child_level.toString(),
|
|
1489
|
+
"; index",
|
|
1490
|
+
child_level.toString(),
|
|
1491
|
+
"++)"
|
|
1492
|
+
], () => {
|
|
1493
|
+
this.emitLine(cJSON.items.cType, " *x", child_level.toString(), " = hashtable_lookup(x", level > 0 ? level.toString() : "", "->", name, ", keys", child_level.toString(), "[index", child_level.toString(), "]);");
|
|
1306
1494
|
const add = (type, cJSON, child_level) => {
|
|
1307
1495
|
if (cJSON.items.cjsonType === "cJSON_Array") {
|
|
1308
1496
|
if (type instanceof Type_1.MapType) {
|
|
@@ -1323,7 +1511,9 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1323
1511
|
else if (cJSON.items.cjsonType === "cJSON_NULL") {
|
|
1324
1512
|
this.emitLine(cJSON.addToObject, "(j", child_level.toString(), ", keys", child_level.toString(), "[index", child_level.toString(), "], ", cJSON.items.createObject, "());");
|
|
1325
1513
|
}
|
|
1326
|
-
else if (
|
|
1514
|
+
else if (cJSON.items.cjsonType === "cJSON_String" ||
|
|
1515
|
+
cJSON.items.cjsonType === "cJSON_Object" ||
|
|
1516
|
+
cJSON.items.cjsonType === "cJSON_Union") {
|
|
1327
1517
|
this.emitLine(cJSON.addToObject, "(j", child_level.toString(), ", keys", child_level.toString(), "[index", child_level.toString(), "], ", cJSON.items.createObject, "(x", child_level.toString(), "));");
|
|
1328
1518
|
}
|
|
1329
1519
|
else {
|
|
@@ -1331,7 +1521,11 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1331
1521
|
}
|
|
1332
1522
|
};
|
|
1333
1523
|
if (cJSON.items.isNullable) {
|
|
1334
|
-
this.emitBlock([
|
|
1524
|
+
this.emitBlock([
|
|
1525
|
+
"if ((void *)0xDEADBEEF != x",
|
|
1526
|
+
child_level.toString(),
|
|
1527
|
+
")"
|
|
1528
|
+
], () => {
|
|
1335
1529
|
add(property.type, cJSON, child_level);
|
|
1336
1530
|
});
|
|
1337
1531
|
this.emitBlock(["else"], () => {
|
|
@@ -1344,7 +1538,7 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1344
1538
|
});
|
|
1345
1539
|
this.emitLine("cJSON_free(keys", child_level.toString(), ");");
|
|
1346
1540
|
});
|
|
1347
|
-
this.emitLine(cJSON.addToObject, "(j",
|
|
1541
|
+
this.emitLine(cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '", j', child_level.toString(), ");");
|
|
1348
1542
|
});
|
|
1349
1543
|
});
|
|
1350
1544
|
}
|
|
@@ -1353,57 +1547,58 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1353
1547
|
}
|
|
1354
1548
|
else if (cJSON.cjsonType === "cJSON_NULL") {
|
|
1355
1549
|
if (property.isOptional) {
|
|
1356
|
-
this.emitBlock(["if (NULL != x",
|
|
1357
|
-
this.emitLine(cJSON.addToObject, "(j",
|
|
1550
|
+
this.emitBlock(["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], () => {
|
|
1551
|
+
this.emitLine(cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '");');
|
|
1358
1552
|
});
|
|
1359
1553
|
}
|
|
1360
1554
|
else {
|
|
1361
|
-
this.emitLine(cJSON.addToObject, "(j",
|
|
1555
|
+
this.emitLine(cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '");');
|
|
1362
1556
|
}
|
|
1363
1557
|
}
|
|
1364
1558
|
else if (cJSON.cjsonType === "cJSON_String") {
|
|
1365
|
-
this.emitBlock(["if (NULL != x",
|
|
1366
|
-
this.emitLine(cJSON.addToObject, "(j",
|
|
1559
|
+
this.emitBlock(["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], () => {
|
|
1560
|
+
this.emitLine(cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '", x', level > 0 ? level.toString() : "", "->", name, ");");
|
|
1367
1561
|
});
|
|
1368
|
-
if (
|
|
1562
|
+
if (!property.isOptional && !cJSON.isNullable) {
|
|
1369
1563
|
this.emitBlock(["else"], () => {
|
|
1370
|
-
this.emitLine(cJSON.addToObject, "(j",
|
|
1564
|
+
this.emitLine(cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '", "");');
|
|
1371
1565
|
});
|
|
1372
1566
|
}
|
|
1373
1567
|
}
|
|
1374
|
-
else if (
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1568
|
+
else if (cJSON.cjsonType === "cJSON_Object" ||
|
|
1569
|
+
cJSON.cjsonType === "cJSON_Union") {
|
|
1570
|
+
if (property.isOptional || cJSON.isNullable) {
|
|
1571
|
+
this.emitBlock(["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], () => {
|
|
1572
|
+
this.emitLine(cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '", ', cJSON.createObject, "(x", level > 0 ? level.toString() : "", "->", name, "));");
|
|
1378
1573
|
});
|
|
1379
1574
|
}
|
|
1380
1575
|
else {
|
|
1381
|
-
this.emitLine(cJSON.addToObject, "(j",
|
|
1576
|
+
this.emitLine(cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '", ', cJSON.createObject, "(x", level > 0 ? level.toString() : "", "->", name, "));");
|
|
1382
1577
|
}
|
|
1383
1578
|
}
|
|
1384
1579
|
else if (cJSON.cjsonType === "cJSON_Enum") {
|
|
1385
|
-
if (
|
|
1386
|
-
this.emitBlock(["if (NULL != x",
|
|
1387
|
-
this.emitLine(cJSON.addToObject, "(j",
|
|
1580
|
+
if (property.isOptional || cJSON.isNullable) {
|
|
1581
|
+
this.emitBlock(["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], () => {
|
|
1582
|
+
this.emitLine(cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '", ', cJSON.createObject, "(*x", level > 0 ? level.toString() : "", "->", name, "));");
|
|
1388
1583
|
});
|
|
1389
1584
|
}
|
|
1390
1585
|
else {
|
|
1391
|
-
this.emitLine(cJSON.addToObject, "(j",
|
|
1586
|
+
this.emitLine(cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '", ', cJSON.createObject, "(x", level > 0 ? level.toString() : "", "->", name, "));");
|
|
1392
1587
|
}
|
|
1393
1588
|
}
|
|
1394
1589
|
else {
|
|
1395
|
-
if (
|
|
1396
|
-
this.emitBlock(["if (NULL != x",
|
|
1397
|
-
this.emitLine(cJSON.addToObject, "(j",
|
|
1590
|
+
if (property.isOptional || cJSON.isNullable) {
|
|
1591
|
+
this.emitBlock(["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], () => {
|
|
1592
|
+
this.emitLine(cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '", *x', level > 0 ? level.toString() : "", "->", name, ");");
|
|
1398
1593
|
});
|
|
1399
1594
|
}
|
|
1400
1595
|
else {
|
|
1401
|
-
this.emitLine(cJSON.addToObject, "(j",
|
|
1596
|
+
this.emitLine(cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '", x', level > 0 ? level.toString() : "", "->", name, ");");
|
|
1402
1597
|
}
|
|
1403
1598
|
}
|
|
1404
1599
|
if (cJSON.isNullable) {
|
|
1405
1600
|
this.emitBlock(["else"], () => {
|
|
1406
|
-
this.emitLine("cJSON_AddNullToObject(j",
|
|
1601
|
+
this.emitLine("cJSON_AddNullToObject(j", level > 0 ? level.toString() : "", ', "', jsonName, '");');
|
|
1407
1602
|
});
|
|
1408
1603
|
}
|
|
1409
1604
|
});
|
|
@@ -1444,7 +1639,7 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1444
1639
|
else if (cJSON.cjsonType === "cJSON_Map") {
|
|
1445
1640
|
/* Not supported */
|
|
1446
1641
|
}
|
|
1447
|
-
else if (
|
|
1642
|
+
else if (cJSON.cjsonType === "cJSON_Invalid" || cJSON.cjsonType === "cJSON_NULL") {
|
|
1448
1643
|
/* Nothing to do */
|
|
1449
1644
|
}
|
|
1450
1645
|
else {
|
|
@@ -1456,10 +1651,10 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1456
1651
|
else if (type instanceof Type_1.ClassType) {
|
|
1457
1652
|
this.forEachClassProperty(type, "none", (name, _jsonName, property) => {
|
|
1458
1653
|
const cJSON = this.quicktypeTypeToCJSON(property.type, property.isOptional);
|
|
1459
|
-
if (
|
|
1654
|
+
if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) {
|
|
1460
1655
|
const child_level = level + 1;
|
|
1461
|
-
this.emitBlock(["if (NULL != x",
|
|
1462
|
-
this.emitLine(cJSON.items.cType, " * x", child_level.toString(), " = list_get_head(x",
|
|
1656
|
+
this.emitBlock(["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], () => {
|
|
1657
|
+
this.emitLine(cJSON.items.cType, " * x", child_level.toString(), " = list_get_head(x", level > 0 ? level.toString() : "", "->", name, ");");
|
|
1463
1658
|
this.emitBlock(["while (NULL != x", child_level.toString(), ")"], () => {
|
|
1464
1659
|
if (cJSON.items.cjsonType === "cJSON_Array") {
|
|
1465
1660
|
if (property.type instanceof Type_1.ArrayType) {
|
|
@@ -1473,7 +1668,8 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1473
1668
|
else if (cJSON.items.cjsonType === "cJSON_Map") {
|
|
1474
1669
|
/* Not supported */
|
|
1475
1670
|
}
|
|
1476
|
-
else if (
|
|
1671
|
+
else if (cJSON.items.cjsonType === "cJSON_Invalid" ||
|
|
1672
|
+
cJSON.items.cjsonType === "cJSON_NULL") {
|
|
1477
1673
|
/* Nothing to do */
|
|
1478
1674
|
}
|
|
1479
1675
|
else {
|
|
@@ -1486,19 +1682,29 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1486
1682
|
this.emitLine(cJSON.items.deleteType, "(x", child_level.toString(), ");");
|
|
1487
1683
|
}
|
|
1488
1684
|
}
|
|
1489
|
-
this.emitLine("x", child_level.toString(), " = list_get_next(x",
|
|
1685
|
+
this.emitLine("x", child_level.toString(), " = list_get_next(x", level > 0 ? level.toString() : "", "->", name, ");");
|
|
1490
1686
|
});
|
|
1491
|
-
this.emitLine(cJSON.deleteType, "(x",
|
|
1687
|
+
this.emitLine(cJSON.deleteType, "(x", level > 0 ? level.toString() : "", "->", name, ");");
|
|
1492
1688
|
});
|
|
1493
1689
|
}
|
|
1494
|
-
else if (
|
|
1690
|
+
else if (cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined) {
|
|
1495
1691
|
const child_level = level + 1;
|
|
1496
|
-
this.emitBlock(["if (NULL != x",
|
|
1692
|
+
this.emitBlock(["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], () => {
|
|
1497
1693
|
this.emitLine("char **keys", child_level.toString(), " = NULL;");
|
|
1498
|
-
this.emitLine("size_t count", child_level.toString(), " = hashtable_get_keys(x",
|
|
1694
|
+
this.emitLine("size_t count", child_level.toString(), " = hashtable_get_keys(x", level > 0 ? level.toString() : "", "->", name, ", &keys", child_level.toString(), ");");
|
|
1499
1695
|
this.emitBlock(["if (NULL != keys", child_level.toString(), ")"], () => {
|
|
1500
|
-
this.emitBlock([
|
|
1501
|
-
|
|
1696
|
+
this.emitBlock([
|
|
1697
|
+
"for (size_t index",
|
|
1698
|
+
child_level.toString(),
|
|
1699
|
+
" = 0; index",
|
|
1700
|
+
child_level.toString(),
|
|
1701
|
+
" < count",
|
|
1702
|
+
child_level.toString(),
|
|
1703
|
+
"; index",
|
|
1704
|
+
child_level.toString(),
|
|
1705
|
+
"++)"
|
|
1706
|
+
], () => {
|
|
1707
|
+
this.emitLine(cJSON.items.cType, " *x", child_level.toString(), " = hashtable_lookup(x", level > 0 ? level.toString() : "", "->", name, ", keys", child_level.toString(), "[index", child_level.toString(), "]);");
|
|
1502
1708
|
this.emitBlock(["if (NULL != x", child_level.toString(), ")"], () => {
|
|
1503
1709
|
if (cJSON.items.cjsonType === "cJSON_Array") {
|
|
1504
1710
|
if (property.type instanceof Type_1.MapType) {
|
|
@@ -1512,12 +1718,17 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1512
1718
|
else if (cJSON.items.cjsonType === "cJSON_Map") {
|
|
1513
1719
|
/* Not supported */
|
|
1514
1720
|
}
|
|
1515
|
-
else if (
|
|
1721
|
+
else if (cJSON.items.cjsonType === "cJSON_Invalid" ||
|
|
1722
|
+
cJSON.items.cjsonType === "cJSON_NULL") {
|
|
1516
1723
|
/* Nothing to do */
|
|
1517
1724
|
}
|
|
1518
1725
|
else {
|
|
1519
1726
|
if (cJSON.items.isNullable) {
|
|
1520
|
-
this.emitBlock([
|
|
1727
|
+
this.emitBlock([
|
|
1728
|
+
"if ((void *)0xDEADBEEF != x",
|
|
1729
|
+
child_level.toString(),
|
|
1730
|
+
")"
|
|
1731
|
+
], () => {
|
|
1521
1732
|
this.emitLine(cJSON.items.deleteType, "(x", child_level.toString(), ");");
|
|
1522
1733
|
});
|
|
1523
1734
|
}
|
|
@@ -1529,21 +1740,23 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1529
1740
|
});
|
|
1530
1741
|
this.emitLine("cJSON_free(keys", child_level.toString(), ");");
|
|
1531
1742
|
});
|
|
1532
|
-
this.emitLine(cJSON.deleteType, "(x",
|
|
1743
|
+
this.emitLine(cJSON.deleteType, "(x", level > 0 ? level.toString() : "", "->", name, ");");
|
|
1533
1744
|
});
|
|
1534
1745
|
}
|
|
1535
|
-
else if (
|
|
1746
|
+
else if (cJSON.cjsonType === "cJSON_Invalid" || cJSON.cjsonType === "cJSON_NULL") {
|
|
1536
1747
|
/* Nothing to do */
|
|
1537
1748
|
}
|
|
1538
|
-
else if (
|
|
1539
|
-
|
|
1540
|
-
|
|
1749
|
+
else if (cJSON.cjsonType === "cJSON_String" ||
|
|
1750
|
+
cJSON.cjsonType === "cJSON_Object" ||
|
|
1751
|
+
cJSON.cjsonType === "cJSON_Union") {
|
|
1752
|
+
this.emitBlock(["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], () => {
|
|
1753
|
+
this.emitLine(cJSON.deleteType, "(x", level > 0 ? level.toString() : "", "->", name, ");");
|
|
1541
1754
|
});
|
|
1542
1755
|
}
|
|
1543
1756
|
else {
|
|
1544
|
-
if (
|
|
1545
|
-
this.emitBlock(["if (NULL != x",
|
|
1546
|
-
this.emitLine(cJSON.deleteType, "(x",
|
|
1757
|
+
if (property.isOptional || cJSON.isNullable) {
|
|
1758
|
+
this.emitBlock(["if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")"], () => {
|
|
1759
|
+
this.emitLine(cJSON.deleteType, "(x", level > 0 ? level.toString() : "", "->", name, ");");
|
|
1547
1760
|
});
|
|
1548
1761
|
}
|
|
1549
1762
|
}
|
|
@@ -1588,7 +1801,7 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1588
1801
|
emitTopLevelTypedef(type, className) {
|
|
1589
1802
|
this.emitBlock(["struct ", className], () => {
|
|
1590
1803
|
const cJSON = this.quicktypeTypeToCJSON(type, false);
|
|
1591
|
-
this.emitLine(cJSON.cType,
|
|
1804
|
+
this.emitLine(cJSON.cType, cJSON.optionalQualifier !== "" ? " " : "", cJSON.optionalQualifier, " value;");
|
|
1592
1805
|
}, "", true);
|
|
1593
1806
|
this.ensureBlankLine();
|
|
1594
1807
|
this.emitTypdefAlias(type, className);
|
|
@@ -1632,7 +1845,7 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1632
1845
|
this.emitBlock(["if (NULL != (x = cJSON_malloc(sizeof(struct ", className, "))))"], () => {
|
|
1633
1846
|
this.emitLine("memset(x, 0, sizeof(struct ", className, "));");
|
|
1634
1847
|
const cJSON = this.quicktypeTypeToCJSON(type, false);
|
|
1635
|
-
if (
|
|
1848
|
+
if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) {
|
|
1636
1849
|
this.emitLine("x->value = list_create(false, NULL);");
|
|
1637
1850
|
this.emitBlock(["if (NULL != x->value)"], () => {
|
|
1638
1851
|
this.emitLine("cJSON * e = NULL;");
|
|
@@ -1644,7 +1857,8 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1644
1857
|
else if (cJSON.items.cjsonType === "cJSON_Map") {
|
|
1645
1858
|
/* Not supported */
|
|
1646
1859
|
}
|
|
1647
|
-
else if (
|
|
1860
|
+
else if (cJSON.items.cjsonType === "cJSON_Invalid" ||
|
|
1861
|
+
cJSON.items.cjsonType === "cJSON_NULL") {
|
|
1648
1862
|
this.emitLine("list_add_tail(x->value, (", cJSON.items.cType, " *)0xDEADBEAF, sizeof(", cJSON.items.cType, " *));");
|
|
1649
1863
|
}
|
|
1650
1864
|
else if (cJSON.items.cjsonType === "cJSON_String") {
|
|
@@ -1668,7 +1882,7 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1668
1882
|
});
|
|
1669
1883
|
});
|
|
1670
1884
|
}
|
|
1671
|
-
else if (
|
|
1885
|
+
else if (cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined) {
|
|
1672
1886
|
this.emitLine("x->value = hashtable_create(", this.hashtableSize, ", false);");
|
|
1673
1887
|
this.emitBlock(["if (NULL != x->value)"], () => {
|
|
1674
1888
|
this.emitLine("cJSON * e = NULL;");
|
|
@@ -1680,7 +1894,8 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1680
1894
|
else if (cJSON.items.cjsonType === "cJSON_Map") {
|
|
1681
1895
|
/* Not supported */
|
|
1682
1896
|
}
|
|
1683
|
-
else if (
|
|
1897
|
+
else if (cJSON.items.cjsonType === "cJSON_Invalid" ||
|
|
1898
|
+
cJSON.items.cjsonType === "cJSON_NULL") {
|
|
1684
1899
|
this.emitLine("hashtable_add(x->value, e->string, (", cJSON.items.cType, " *)0xDEADBEEF, sizeof(", cJSON.items.cType, " *));");
|
|
1685
1900
|
}
|
|
1686
1901
|
else if (cJSON.items.cjsonType === "cJSON_String") {
|
|
@@ -1726,7 +1941,7 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1726
1941
|
this.emitLine("cJSON * j = NULL;");
|
|
1727
1942
|
this.emitBlock(["if (NULL != x)"], () => {
|
|
1728
1943
|
const cJSON = this.quicktypeTypeToCJSON(type, false);
|
|
1729
|
-
if (
|
|
1944
|
+
if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) {
|
|
1730
1945
|
this.emitBlock(["if (NULL != x->value)"], () => {
|
|
1731
1946
|
this.emitLine("j = ", cJSON.createObject, "();");
|
|
1732
1947
|
this.emitBlock(["if (NULL != j)"], () => {
|
|
@@ -1745,7 +1960,9 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1745
1960
|
else if (cJSON.items.cjsonType === "cJSON_NULL") {
|
|
1746
1961
|
this.emitLine("cJSON_AddItemToArray(j, ", cJSON.items.createObject, "());");
|
|
1747
1962
|
}
|
|
1748
|
-
else if (
|
|
1963
|
+
else if (cJSON.items.cjsonType === "cJSON_String" ||
|
|
1964
|
+
cJSON.items.cjsonType === "cJSON_Object" ||
|
|
1965
|
+
cJSON.items.cjsonType === "cJSON_Union") {
|
|
1749
1966
|
this.emitLine("cJSON_AddItemToArray(j, ", cJSON.items.createObject, "(x1));");
|
|
1750
1967
|
}
|
|
1751
1968
|
else {
|
|
@@ -1768,7 +1985,7 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1768
1985
|
});
|
|
1769
1986
|
});
|
|
1770
1987
|
}
|
|
1771
|
-
else if (
|
|
1988
|
+
else if (cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined) {
|
|
1772
1989
|
this.emitBlock(["if (NULL != x->value)"], () => {
|
|
1773
1990
|
this.emitLine("j = ", cJSON.createObject, "();");
|
|
1774
1991
|
this.emitBlock(["if (NULL != j)"], () => {
|
|
@@ -1790,7 +2007,9 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1790
2007
|
else if (cJSON.items.cjsonType === "cJSON_NULL") {
|
|
1791
2008
|
this.emitLine(cJSON.addToObject, "(j, keys[index], ", cJSON.items.createObject, "());");
|
|
1792
2009
|
}
|
|
1793
|
-
else if (
|
|
2010
|
+
else if (cJSON.items.cjsonType === "cJSON_String" ||
|
|
2011
|
+
cJSON.items.cjsonType === "cJSON_Object" ||
|
|
2012
|
+
cJSON.items.cjsonType === "cJSON_Union") {
|
|
1794
2013
|
this.emitLine(cJSON.addToObject, "(j, keys[index], ", cJSON.items.createObject, "(x2));");
|
|
1795
2014
|
}
|
|
1796
2015
|
else {
|
|
@@ -1844,7 +2063,7 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1844
2063
|
this.emitBlock(["void cJSON_Delete", className, "(struct ", className, " * x)"], () => {
|
|
1845
2064
|
this.emitBlock(["if (NULL != x)"], () => {
|
|
1846
2065
|
const cJSON = this.quicktypeTypeToCJSON(type, false);
|
|
1847
|
-
if (
|
|
2066
|
+
if (cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined) {
|
|
1848
2067
|
this.emitBlock(["if (NULL != x->value)"], () => {
|
|
1849
2068
|
this.emitLine(cJSON.items.cType, " * x1 = list_get_head(x->value);");
|
|
1850
2069
|
this.emitBlock(["while (NULL != x1)"], () => {
|
|
@@ -1861,7 +2080,7 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1861
2080
|
this.emitLine(cJSON.deleteType, "(x->value);");
|
|
1862
2081
|
});
|
|
1863
2082
|
}
|
|
1864
|
-
else if (
|
|
2083
|
+
else if (cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined) {
|
|
1865
2084
|
this.emitBlock(["if (NULL != x->value)"], () => {
|
|
1866
2085
|
this.emitLine("char **keys = NULL;");
|
|
1867
2086
|
this.emitLine("size_t count = hashtable_get_keys(x->value, &keys);");
|
|
@@ -1884,10 +2103,12 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1884
2103
|
this.emitLine(cJSON.deleteType, "(x->value);");
|
|
1885
2104
|
});
|
|
1886
2105
|
}
|
|
1887
|
-
else if (
|
|
2106
|
+
else if (cJSON.cjsonType === "cJSON_Invalid" || cJSON.cjsonType === "cJSON_NULL") {
|
|
1888
2107
|
/* Nothing to do */
|
|
1889
2108
|
}
|
|
1890
|
-
else if (
|
|
2109
|
+
else if (cJSON.cjsonType === "cJSON_String" ||
|
|
2110
|
+
cJSON.cjsonType === "cJSON_Object" ||
|
|
2111
|
+
cJSON.cjsonType === "cJSON_Union") {
|
|
1891
2112
|
this.emitLine(cJSON.deleteType, "(x->value);");
|
|
1892
2113
|
}
|
|
1893
2114
|
else {
|
|
@@ -1908,34 +2129,155 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1908
2129
|
quicktypeTypeToCJSON(t, isOptional, isNullable = false) {
|
|
1909
2130
|
/* Compute cJSON type */
|
|
1910
2131
|
return (0, TypeUtils_1.matchType)(t, _anyType => {
|
|
1911
|
-
return {
|
|
2132
|
+
return {
|
|
2133
|
+
cType: "void",
|
|
2134
|
+
optionalQualifier: "*",
|
|
2135
|
+
cjsonType: "cJSON_Invalid",
|
|
2136
|
+
isType: "cJSON_IsInvalid",
|
|
2137
|
+
getValue: "",
|
|
2138
|
+
addToObject: "",
|
|
2139
|
+
createObject: "",
|
|
2140
|
+
deleteType: "",
|
|
2141
|
+
items: undefined,
|
|
2142
|
+
isNullable
|
|
2143
|
+
};
|
|
1912
2144
|
}, _nullType => {
|
|
1913
|
-
return {
|
|
2145
|
+
return {
|
|
2146
|
+
cType: "void",
|
|
2147
|
+
optionalQualifier: "*",
|
|
2148
|
+
cjsonType: "cJSON_NULL",
|
|
2149
|
+
isType: "cJSON_IsNull",
|
|
2150
|
+
getValue: "",
|
|
2151
|
+
addToObject: "cJSON_AddNullToObject",
|
|
2152
|
+
createObject: "cJSON_CreateNull",
|
|
2153
|
+
deleteType: "cJSON_free",
|
|
2154
|
+
items: undefined,
|
|
2155
|
+
isNullable
|
|
2156
|
+
};
|
|
1914
2157
|
}, _boolType => {
|
|
1915
|
-
return {
|
|
2158
|
+
return {
|
|
2159
|
+
cType: "bool",
|
|
2160
|
+
optionalQualifier: isOptional === true ? "*" : "",
|
|
2161
|
+
cjsonType: "cJSON_Bool",
|
|
2162
|
+
isType: "cJSON_IsBool",
|
|
2163
|
+
getValue: "cJSON_IsTrue",
|
|
2164
|
+
addToObject: "cJSON_AddBoolToObject",
|
|
2165
|
+
createObject: "cJSON_CreateBool",
|
|
2166
|
+
deleteType: "cJSON_free",
|
|
2167
|
+
items: undefined,
|
|
2168
|
+
isNullable
|
|
2169
|
+
};
|
|
1916
2170
|
}, _integerType => {
|
|
1917
|
-
return {
|
|
2171
|
+
return {
|
|
2172
|
+
cType: this.typeIntegerSize,
|
|
2173
|
+
optionalQualifier: isOptional === true ? "*" : "",
|
|
2174
|
+
cjsonType: "cJSON_Number",
|
|
2175
|
+
isType: "cJSON_IsNumber",
|
|
2176
|
+
getValue: "cJSON_GetNumberValue",
|
|
2177
|
+
addToObject: "cJSON_AddNumberToObject",
|
|
2178
|
+
createObject: "cJSON_CreateNumber",
|
|
2179
|
+
deleteType: "cJSON_free",
|
|
2180
|
+
items: undefined,
|
|
2181
|
+
isNullable
|
|
2182
|
+
};
|
|
1918
2183
|
}, _doubleType => {
|
|
1919
|
-
return {
|
|
2184
|
+
return {
|
|
2185
|
+
cType: "double",
|
|
2186
|
+
optionalQualifier: isOptional === true ? "*" : "",
|
|
2187
|
+
cjsonType: "cJSON_Number",
|
|
2188
|
+
isType: "cJSON_IsNumber",
|
|
2189
|
+
getValue: "cJSON_GetNumberValue",
|
|
2190
|
+
addToObject: "cJSON_AddNumberToObject",
|
|
2191
|
+
createObject: "cJSON_CreateNumber",
|
|
2192
|
+
deleteType: "cJSON_free",
|
|
2193
|
+
items: undefined,
|
|
2194
|
+
isNullable
|
|
2195
|
+
};
|
|
1920
2196
|
}, _stringType => {
|
|
1921
|
-
return {
|
|
2197
|
+
return {
|
|
2198
|
+
cType: "char",
|
|
2199
|
+
optionalQualifier: "*",
|
|
2200
|
+
cjsonType: "cJSON_String",
|
|
2201
|
+
isType: "cJSON_IsString",
|
|
2202
|
+
getValue: "cJSON_GetStringValue",
|
|
2203
|
+
addToObject: "cJSON_AddStringToObject",
|
|
2204
|
+
createObject: "cJSON_CreateString",
|
|
2205
|
+
deleteType: "cJSON_free",
|
|
2206
|
+
items: undefined,
|
|
2207
|
+
isNullable
|
|
2208
|
+
};
|
|
1922
2209
|
}, arrayType => {
|
|
1923
2210
|
const items = this.quicktypeTypeToCJSON(arrayType.items, false);
|
|
1924
|
-
return {
|
|
2211
|
+
return {
|
|
2212
|
+
cType: "list_t",
|
|
2213
|
+
optionalQualifier: "*",
|
|
2214
|
+
cjsonType: "cJSON_Array",
|
|
2215
|
+
isType: "cJSON_IsArray",
|
|
2216
|
+
getValue: "cJSON_GetArrayItem",
|
|
2217
|
+
addToObject: "cJSON_AddItemToObject",
|
|
2218
|
+
createObject: "cJSON_CreateArray",
|
|
2219
|
+
deleteType: "list_release",
|
|
2220
|
+
items,
|
|
2221
|
+
isNullable
|
|
2222
|
+
};
|
|
1925
2223
|
}, classType => {
|
|
1926
|
-
return {
|
|
2224
|
+
return {
|
|
2225
|
+
cType: ["struct ", this.nameForNamedType(classType)],
|
|
2226
|
+
optionalQualifier: "*",
|
|
2227
|
+
cjsonType: "cJSON_Object",
|
|
2228
|
+
isType: "cJSON_IsObject",
|
|
2229
|
+
getValue: ["cJSON_Get", this.nameForNamedType(classType), "Value"],
|
|
2230
|
+
addToObject: "cJSON_AddItemToObject",
|
|
2231
|
+
createObject: ["cJSON_Create", this.nameForNamedType(classType)],
|
|
2232
|
+
deleteType: ["cJSON_Delete", this.nameForNamedType(classType)],
|
|
2233
|
+
items: undefined,
|
|
2234
|
+
isNullable
|
|
2235
|
+
};
|
|
1927
2236
|
}, mapType => {
|
|
1928
2237
|
const items = this.quicktypeTypeToCJSON(mapType.values, false);
|
|
1929
|
-
return {
|
|
2238
|
+
return {
|
|
2239
|
+
cType: "hashtable_t",
|
|
2240
|
+
optionalQualifier: "*",
|
|
2241
|
+
cjsonType: "cJSON_Map",
|
|
2242
|
+
isType: "cJSON_IsObject",
|
|
2243
|
+
getValue: "",
|
|
2244
|
+
addToObject: "cJSON_AddItemToObject",
|
|
2245
|
+
createObject: "cJSON_CreateObject",
|
|
2246
|
+
deleteType: "hashtable_release",
|
|
2247
|
+
items,
|
|
2248
|
+
isNullable
|
|
2249
|
+
};
|
|
1930
2250
|
}, enumType => {
|
|
1931
|
-
return {
|
|
2251
|
+
return {
|
|
2252
|
+
cType: ["enum ", this.nameForNamedType(enumType)],
|
|
2253
|
+
optionalQualifier: isOptional === true ? "*" : "",
|
|
2254
|
+
cjsonType: "cJSON_Enum",
|
|
2255
|
+
isType: "cJSON_IsString",
|
|
2256
|
+
getValue: ["cJSON_Get", this.nameForNamedType(enumType), "Value"],
|
|
2257
|
+
addToObject: "cJSON_AddItemToObject",
|
|
2258
|
+
createObject: ["cJSON_Create", this.nameForNamedType(enumType)],
|
|
2259
|
+
deleteType: "cJSON_free",
|
|
2260
|
+
items: undefined,
|
|
2261
|
+
isNullable
|
|
2262
|
+
};
|
|
1932
2263
|
}, unionType => {
|
|
1933
2264
|
const nullable = (0, TypeUtils_1.nullableFromUnion)(unionType);
|
|
1934
2265
|
if (nullable !== null) {
|
|
1935
2266
|
return this.quicktypeTypeToCJSON(nullable, true, true);
|
|
1936
2267
|
}
|
|
1937
2268
|
else {
|
|
1938
|
-
return {
|
|
2269
|
+
return {
|
|
2270
|
+
cType: ["struct ", this.nameForNamedType(unionType)],
|
|
2271
|
+
optionalQualifier: "*",
|
|
2272
|
+
cjsonType: "cJSON_Union",
|
|
2273
|
+
isType: "",
|
|
2274
|
+
getValue: ["cJSON_Get", this.nameForNamedType(unionType), "Value"],
|
|
2275
|
+
addToObject: "cJSON_AddItemToObject",
|
|
2276
|
+
createObject: ["cJSON_Create", this.nameForNamedType(unionType)],
|
|
2277
|
+
deleteType: ["cJSON_Delete", this.nameForNamedType(unionType)],
|
|
2278
|
+
items: undefined,
|
|
2279
|
+
isNullable
|
|
2280
|
+
};
|
|
1939
2281
|
}
|
|
1940
2282
|
});
|
|
1941
2283
|
}
|
|
@@ -1964,12 +2306,12 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
1964
2306
|
]);
|
|
1965
2307
|
this.ensureBlankLine();
|
|
1966
2308
|
/* Write include guard */
|
|
1967
|
-
this.emitLine("#ifndef __", (0, Strings_1.allUpperWordStyle)(this.currentFilename.replace(new RegExp(/[^a-zA-Z0-9]+/,
|
|
1968
|
-
this.emitLine("#define __", (0, Strings_1.allUpperWordStyle)(this.currentFilename.replace(new RegExp(/[^a-zA-Z0-9]+/,
|
|
2309
|
+
this.emitLine("#ifndef __", (0, Strings_1.allUpperWordStyle)(this.currentFilename.replace(new RegExp(/[^a-zA-Z0-9]+/, "g"), "_")), "__");
|
|
2310
|
+
this.emitLine("#define __", (0, Strings_1.allUpperWordStyle)(this.currentFilename.replace(new RegExp(/[^a-zA-Z0-9]+/, "g"), "_")), "__");
|
|
1969
2311
|
this.ensureBlankLine();
|
|
1970
2312
|
/* Write C++ guard */
|
|
1971
2313
|
this.emitLine("#ifdef __cplusplus");
|
|
1972
|
-
this.emitLine(
|
|
2314
|
+
this.emitLine('extern "C" {');
|
|
1973
2315
|
this.emitLine("#endif");
|
|
1974
2316
|
this.ensureBlankLine();
|
|
1975
2317
|
/* Write includes */
|
|
@@ -2006,7 +2348,7 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
2006
2348
|
this.emitLine("#endif");
|
|
2007
2349
|
this.ensureBlankLine();
|
|
2008
2350
|
/* Write include guard */
|
|
2009
|
-
this.emitLine("#endif /* __", (0, Strings_1.allUpperWordStyle)(this.currentFilename.replace(new RegExp(/[^a-zA-Z0-9]+/,
|
|
2351
|
+
this.emitLine("#endif /* __", (0, Strings_1.allUpperWordStyle)(this.currentFilename.replace(new RegExp(/[^a-zA-Z0-9]+/, "g"), "_")), "__ */");
|
|
2010
2352
|
this.ensureBlankLine();
|
|
2011
2353
|
/* Close file */
|
|
2012
2354
|
super.finishFile((0, Support_1.defined)(this.currentFilename));
|
|
@@ -2127,7 +2469,7 @@ class CJSONRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
2127
2469
|
/* We can NOT forward declare direct class members, e.g. a class type is included at level#0 */
|
|
2128
2470
|
/* HOWEVER if it is not a direct class member, then we can SURELY forward declare it */
|
|
2129
2471
|
propRecord.typeKind = "class";
|
|
2130
|
-
propRecord.kind =
|
|
2472
|
+
propRecord.kind = t.level === 0 ? IncludeKind.Include : IncludeKind.ForwardDeclare;
|
|
2131
2473
|
if (t.forceInclude) {
|
|
2132
2474
|
propRecord.kind = IncludeKind.Include;
|
|
2133
2475
|
}
|