Incremental migration of message.cc to Emit

PiperOrigin-RevId: 530452483
pull/12733/head
Matt Kulukundis 2 years ago committed by Copybara-Service
parent e5a7a2eba7
commit 151c737019
  1. 74
      src/google/protobuf/compiler/cpp/message.cc

@ -1073,40 +1073,46 @@ void MessageGenerator::GenerateOneofMemberHasBits(const FieldDescriptor* field,
void MessageGenerator::GenerateFieldClear(const FieldDescriptor* field,
bool is_inline, io::Printer* p) {
auto t = p->WithVars(MakeTrackerCalls(field, options_));
Formatter format(p);
// Generate clear_$name$().
if (is_inline) {
format("inline ");
}
format("void $classname$::clear_$name$() {\n");
format.Indent();
if (field->real_containing_oneof()) {
// Clear this field only if it is the active field in this oneof,
// otherwise ignore
auto t = p->WithVars(MakeTrackerCalls(field, options_));
format("if ($has_field$) {\n");
format.Indent();
field_generators_.get(field).GenerateClearingCode(p);
format("clear_has_$oneof_name$();\n");
format.Outdent();
format("}\n");
} else {
if (ShouldSplit(field, options_)) {
format("if (IsSplitMessageDefault()) return;\n");
}
field_generators_.get(field).GenerateClearingCode(p);
if (HasHasbit(field)) {
int has_bit_index = HasBitIndex(field);
auto v = p->WithVars(HasbitVars(has_bit_index));
format("$has_bits$[$has_array_index$] &= ~$has_mask$;\n");
}
}
format("$annotate_clear$");
format.Outdent();
format("}\n");
p->Emit({{"inline", is_inline ? "inline" : ""},
{"body",
[&] {
if (field->real_containing_oneof()) {
// Clear this field only if it is the active field in this
// oneof, otherwise ignore
p->Emit(
{{"clearing_code",
[&] {
field_generators_.get(field).GenerateClearingCode(p);
}}},
R"cc(
if ($has_field$) {
$clearing_code$;
clear_has_$oneof_name$();
}
)cc");
} else {
// TODO(b/281513105): figure out if early return breaks tracking
if (ShouldSplit(field, options_)) {
p->Emit(R"cc(
if (IsSplitMessageDefault()) return;
)cc");
}
field_generators_.get(field).GenerateClearingCode(p);
if (HasHasbit(field)) {
int has_bit_index = HasBitIndex(field);
auto v = p->WithVars(HasbitVars(has_bit_index));
p->Emit(R"cc(
$has_bits$[$has_array_index$] &= ~$has_mask$;
)cc");
}
}
}}},
R"cc(
$inline $void $classname$::clear_$name$() {
$body$;
$annotate_clear$;
}
)cc");
}
void MessageGenerator::GenerateFieldAccessorDefinitions(io::Printer* p) {

Loading…
Cancel
Save