Prevent warnings about unused variables in generated code

This commit is contained in:
Martchus 2021-03-22 14:16:40 +01:00
parent 30735ba187
commit 874c964e0b
2 changed files with 20 additions and 0 deletions

View File

@ -125,11 +125,16 @@ void BinarySerializationCodeGenerator::generate(ostream &os) const
os << " serializer.write(static_cast<const ::" << baseClass->qualifiedName << " &>(customObject));\n";
}
os << " // write members\n";
auto membersWritten = false;
for (const clang::FieldDecl *field : relevantClass.record->fields()) {
if (writePrivateMembers || field->getAccess() == clang::AS_public) {
os << " serializer.write(customObject." << field->getName() << ");\n";
membersWritten = true;
}
}
if (relevantBases.empty() && !membersWritten) {
os << " (void)serializer;\n (void)customObject;\n";
}
os << "}\n";
// skip printing the readCustomType method for classes without default constructor because deserializing those is currently not supported
@ -146,6 +151,7 @@ void BinarySerializationCodeGenerator::generate(ostream &os) const
os << " deserializer.read(static_cast<::" << baseClass->qualifiedName << " &>(customObject));\n";
}
os << " // read members\n";
auto membersRead = false;
for (const clang::FieldDecl *field : relevantClass.record->fields()) {
// skip const members
if (field->getType().isConstant(field->getASTContext())) {
@ -153,8 +159,12 @@ void BinarySerializationCodeGenerator::generate(ostream &os) const
}
if (readPrivateMembers || field->getAccess() == clang::AS_public) {
os << " deserializer.read(customObject." << field->getName() << ");\n";
membersRead = true;
}
}
if (relevantBases.empty() && !membersRead) {
os << " (void)deserializer;\n (void)customObject;\n";
}
os << "}\n\n";
}

View File

@ -124,11 +124,16 @@ void JsonSerializationCodeGenerator::generate(ostream &os) const
os << " push(static_cast<const ::" << baseClass->qualifiedName << " &>(reflectable), value, allocator);\n";
}
os << " // push members\n";
auto pushWritten = false;
for (const clang::FieldDecl *field : relevantClass.record->fields()) {
if (pushPrivateMembers || field->getAccess() == clang::AS_public) {
os << " push(reflectable." << field->getName() << ", \"" << field->getName() << "\", value, allocator);\n";
pushWritten = true;
}
}
if (relevantBases.empty() && !pushWritten) {
os << " (void)reflectable;\n (void)value;\n";
}
os << "}\n";
// skip printing the pull method for classes without default constructor because deserializing those is currently not supported
@ -154,6 +159,7 @@ void JsonSerializationCodeGenerator::generate(ostream &os) const
<< "\";\n"
" }\n"
" // pull members\n";
auto pullWritten = false;
for (const clang::FieldDecl *field : relevantClass.record->fields()) {
// skip const members
if (field->getType().isConstant(field->getASTContext())) {
@ -161,8 +167,12 @@ void JsonSerializationCodeGenerator::generate(ostream &os) const
}
if (pullPrivateMembers || field->getAccess() == clang::AS_public) {
os << " pull(reflectable." << field->getName() << ", \"" << field->getName() << "\", value, errors);\n";
pullWritten = true;
}
}
if (relevantBases.empty() && !pullWritten) {
os << " (void)reflectable;\n (void)value;\n";
}
os << " // restore error context for previous record\n"
" if (errors) {\n"
" errors->currentRecord = previousRecord;\n"