From b75dd91d2e1616bc29629a5068033758b1817d73 Mon Sep 17 00:00:00 2001 From: flounder5 <25795672+flounder5@users.noreply.github.com> Date: Tue, 14 Jan 2025 16:32:53 -0500 Subject: [PATCH 1/5] Fix to C++ getters that return an optional. --- .../src/language/CPlusPlus/CPlusPlusRenderer.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts index 4b70339f2..90b5e8e4c 100644 --- a/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts +++ b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts @@ -848,10 +848,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { * a member called 'value' value = value will screw up the compiler */ const checkConst = this.lookupGlobalName(GlobalNames.CheckConstraint); - if ( - (property.type instanceof UnionType && property.type.findMember("null") !== undefined) || - (property.isOptional && property.type.kind !== "null" && property.type.kind !== "any") - ) { + if (property.type instanceof UnionType && property.type.findMember("null") !== undefined) { this.emitLine(rendered, " ", getterName, "() const { return ", name, "; }"); if (constraints?.has(jsonName)) { this.emitLine( From de4bfaaf23fc2cc0d2f1c3eb9c58beec85a0ef56 Mon Sep 17 00:00:00 2001 From: flounder5 <25795672+flounder5@users.noreply.github.com> Date: Tue, 14 Jan 2025 16:36:23 -0500 Subject: [PATCH 2/5] Test commit. --- .../quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts index 90b5e8e4c..dc0672987 100644 --- a/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts +++ b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts @@ -848,7 +848,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { * a member called 'value' value = value will screw up the compiler */ const checkConst = this.lookupGlobalName(GlobalNames.CheckConstraint); - if (property.type instanceof UnionType && property.type.findMember("null") !== undefined) { + if (property.type instanceof UnionType && property.type.findMember("null") !== undefined) { this.emitLine(rendered, " ", getterName, "() const { return ", name, "; }"); if (constraints?.has(jsonName)) { this.emitLine( From 486b243bbe6bbe64cf0bffc3b2e2b491f5ad7fc6 Mon Sep 17 00:00:00 2001 From: flounder5 <25795672+flounder5@users.noreply.github.com> Date: Tue, 14 Jan 2025 16:37:46 -0500 Subject: [PATCH 3/5] Reverted commit. --- .../quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts index dc0672987..90b5e8e4c 100644 --- a/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts +++ b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts @@ -848,7 +848,7 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { * a member called 'value' value = value will screw up the compiler */ const checkConst = this.lookupGlobalName(GlobalNames.CheckConstraint); - if (property.type instanceof UnionType && property.type.findMember("null") !== undefined) { + if (property.type instanceof UnionType && property.type.findMember("null") !== undefined) { this.emitLine(rendered, " ", getterName, "() const { return ", name, "; }"); if (constraints?.has(jsonName)) { this.emitLine( From 203794d963ea170f0591c609f9575df82582ab32 Mon Sep 17 00:00:00 2001 From: flounder5 <25795672+flounder5@users.noreply.github.com> Date: Thu, 16 Jan 2025 09:50:11 -0500 Subject: [PATCH 4/5] Added the CheckConstraint methods for optional values. --- .../language/CPlusPlus/CPlusPlusRenderer.ts | 74 ++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts index 90b5e8e4c..03783b0f8 100644 --- a/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts +++ b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts @@ -1829,6 +1829,40 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.ensureBlankLine(); } ); + + this.ensureBlankLine(); + + this.emitBlock( + [ + "inline void ", + checkConst, + "(", + this._stringType.getConstType(), + " name, ", + this.withConst(classConstraint), + " & c, ", + "const ", + this._optionalType, + "<", + cppType, + "> & value)" + ], + false, + () => { + this.emitBlock( + ["if (value)"], + false, + () => { + this.emitLine( + checkConst, + "(name, c, *value);" + ); + } + ); + this.ensureBlankLine(); + } + ); + this.ensureBlankLine(); } @@ -1918,7 +1952,12 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { } const checkConst = this.lookupGlobalName(GlobalNames.CheckConstraint); - this.emitNumericCheckConstraints(checkConst, classConstraint, getterMinIntValue, getterMaxIntValue, "int64_t"); + this.emitNumericCheckConstraints( + checkConst, + classConstraint, + getterMinIntValue, + getterMaxIntValue, + "int64_t"); this.emitNumericCheckConstraints( checkConst, classConstraint, @@ -2037,6 +2076,39 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { this.ensureBlankLine(); } ); + + this.ensureBlankLine(); + + this.emitBlock( + [ + "inline void ", + checkConst, + "(", + this._stringType.getConstType(), + " name, ", + this.withConst(classConstraint), + " & c, ", + "const ", + this._optionalType, + "<", + this._stringType.getType(), + ">& value)" + ], + false, + () => { + this.emitBlock( + ["if (value)"], + false, + () => { + this.emitLine( + checkConst, + "(name, c, *value);" + ); + } + ); + this.ensureBlankLine(); + } + ); } protected emitHelperFunctions(): void { From 764617ea457047ad03e0cebdc8294eed8976a84d Mon Sep 17 00:00:00 2001 From: flounder5 <25795672+flounder5@users.noreply.github.com> Date: Thu, 16 Jan 2025 10:16:09 -0500 Subject: [PATCH 5/5] Removed trailing spaces. --- .../src/language/CPlusPlus/CPlusPlusRenderer.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts index 03783b0f8..fd90d7564 100644 --- a/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts +++ b/packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts @@ -1953,10 +1953,10 @@ export class CPlusPlusRenderer extends ConvenienceRenderer { const checkConst = this.lookupGlobalName(GlobalNames.CheckConstraint); this.emitNumericCheckConstraints( - checkConst, - classConstraint, - getterMinIntValue, - getterMaxIntValue, + checkConst, + classConstraint, + getterMinIntValue, + getterMaxIntValue, "int64_t"); this.emitNumericCheckConstraints( checkConst,