|
|
@ -854,7 +854,7 @@ void Reflection::ClearField(Message* message, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
case FieldDescriptor::CPPTYPE_MESSAGE: |
|
|
|
case FieldDescriptor::CPPTYPE_MESSAGE: |
|
|
|
if (!schema_.HasHasbits()) { |
|
|
|
if (schema_.HasBitIndex(field) == -1) { |
|
|
|
// Proto3 does not have has-bits and we need to set a message field
|
|
|
|
// Proto3 does not have has-bits and we need to set a message field
|
|
|
|
// to nullptr in order to indicate its un-presence.
|
|
|
|
// to nullptr in order to indicate its un-presence.
|
|
|
|
if (GetArena(message) == nullptr) { |
|
|
|
if (GetArena(message) == nullptr) { |
|
|
@ -2048,6 +2048,7 @@ void Reflection::ClearBit(Message* message, |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
const uint32 index = schema_.HasBitIndex(field); |
|
|
|
const uint32 index = schema_.HasBitIndex(field); |
|
|
|
|
|
|
|
if (index == -1) return; |
|
|
|
MutableHasBits(message)[index / 32] &= |
|
|
|
MutableHasBits(message)[index / 32] &= |
|
|
|
~(static_cast<uint32>(1) << (index % 32)); |
|
|
|
~(static_cast<uint32>(1) << (index % 32)); |
|
|
|
} |
|
|
|
} |
|
|
|