|
|
@ -2536,13 +2536,7 @@ GenerateOneofClear(io::Printer* printer) { |
|
|
|
printer->Print(oneof_vars, |
|
|
|
printer->Print(oneof_vars, |
|
|
|
"void $classname$::clear_$oneofname$() {\n"); |
|
|
|
"void $classname$::clear_$oneofname$() {\n"); |
|
|
|
printer->Indent(); |
|
|
|
printer->Indent(); |
|
|
|
// In .proto.h mode, fields with a dependent type will generate
|
|
|
|
|
|
|
|
// clearing code that down casts from the dependent base class.
|
|
|
|
|
|
|
|
// However, clear_oneof() methods are always in the .cc file, and thus
|
|
|
|
|
|
|
|
// must remain in the derived base. So, to make the clearing code work,
|
|
|
|
|
|
|
|
// we add a typedef so that the down cast works (it will be a no-op).
|
|
|
|
|
|
|
|
printer->Print(oneof_vars, |
|
|
|
printer->Print(oneof_vars, |
|
|
|
"typedef $classname$ T;\n" |
|
|
|
|
|
|
|
"switch($oneofname$_case()) {\n"); |
|
|
|
"switch($oneofname$_case()) {\n"); |
|
|
|
printer->Indent(); |
|
|
|
printer->Indent(); |
|
|
|
for (int j = 0; j < descriptor_->oneof_decl(i)->field_count(); j++) { |
|
|
|
for (int j = 0; j < descriptor_->oneof_decl(i)->field_count(); j++) { |
|
|
|