diff --git a/php/ext/google/protobuf/php-upb.c b/php/ext/google/protobuf/php-upb.c index 5b94c1c334..f92a636da5 100644 --- a/php/ext/google/protobuf/php-upb.c +++ b/php/ext/google/protobuf/php-upb.c @@ -6714,6 +6714,9 @@ size_t upb_Message_ExtensionCount(const upb_Message* msg) { } +#include +#include + // Must be last. @@ -6739,26 +6742,27 @@ static upb_MiniTableEnum* _upb_MiniTable_AddEnumDataMember(upb_MdEnumDecoder* d, d->enum_table = upb_Arena_Realloc(d->arena, d->enum_table, old_sz, new_sz); upb_MdDecoder_CheckOutOfMemory(&d->base, d->enum_table); } - d->enum_table->data[d->enum_data_count++] = val; + d->enum_table->UPB_PRIVATE(data)[d->enum_data_count++] = val; return d->enum_table; } static void upb_MiniTableEnum_BuildValue(upb_MdEnumDecoder* d, uint32_t val) { upb_MiniTableEnum* table = d->enum_table; d->enum_value_count++; - if (table->value_count || (val > 512 && d->enum_value_count < val / 32)) { - if (table->value_count == 0) { - assert(d->enum_data_count == table->mask_limit / 32); + if (table->UPB_PRIVATE(value_count) || + (val > 512 && d->enum_value_count < val / 32)) { + if (table->UPB_PRIVATE(value_count) == 0) { + UPB_ASSERT(d->enum_data_count == table->UPB_PRIVATE(mask_limit) / 32); } table = _upb_MiniTable_AddEnumDataMember(d, val); - table->value_count++; + table->UPB_PRIVATE(value_count)++; } else { uint32_t new_mask_limit = ((val / 32) + 1) * 32; - while (table->mask_limit < new_mask_limit) { + while (table->UPB_PRIVATE(mask_limit) < new_mask_limit) { table = _upb_MiniTable_AddEnumDataMember(d, 0); - table->mask_limit += 32; + table->UPB_PRIVATE(mask_limit) += 32; } - table->data[val / 32] |= 1ULL << (val % 32); + table->UPB_PRIVATE(data)[val / 32] |= 1ULL << (val % 32); } } @@ -6776,11 +6780,11 @@ static upb_MiniTableEnum* upb_MtDecoder_DoBuildMiniTableEnum( upb_MdDecoder_CheckOutOfMemory(&d->base, d->enum_table); // Guarantee at least 64 bits of mask without checking mask size. - d->enum_table->mask_limit = 64; + d->enum_table->UPB_PRIVATE(mask_limit) = 64; d->enum_table = _upb_MiniTable_AddEnumDataMember(d, 0); d->enum_table = _upb_MiniTable_AddEnumDataMember(d, 0); - d->enum_table->value_count = 0; + d->enum_table->UPB_PRIVATE(value_count) = 0; const char* ptr = data; uint32_t base = 0; @@ -6808,7 +6812,8 @@ static upb_MiniTableEnum* upb_MtDecoder_DoBuildMiniTableEnum( } static upb_MiniTableEnum* upb_MtDecoder_BuildMiniTableEnum( - upb_MdEnumDecoder* const decoder, const char* const data, size_t const len) { + upb_MdEnumDecoder* const decoder, const char* const data, + size_t const len) { if (UPB_SETJMP(decoder->base.err) != 0) return NULL; return upb_MtDecoder_DoBuildMiniTableEnum(decoder, data, len); } diff --git a/php/ext/google/protobuf/php-upb.h b/php/ext/google/protobuf/php-upb.h index 54378b4e78..97917df79a 100644 --- a/php/ext/google/protobuf/php-upb.h +++ b/php/ext/google/protobuf/php-upb.h @@ -933,9 +933,9 @@ UPB_API void* upb_Array_MutableDataPtr(upb_Array* arr); // Must be last. struct upb_MiniTableEnum { - uint32_t mask_limit; // Limit enum value that can be tested with mask. - uint32_t value_count; // Number of values after the bitfield. - uint32_t data[]; // Bitmask + enumerated values follow. + uint32_t UPB_PRIVATE(mask_limit); // Highest that can be tested with mask. + uint32_t UPB_PRIVATE(value_count); // Number of values after the bitfield. + uint32_t UPB_PRIVATE(data)[]; // Bitmask + enumerated values follow. }; #ifdef __cplusplus @@ -945,19 +945,22 @@ extern "C" { UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableEnum_CheckValue)( const struct upb_MiniTableEnum* e, uint32_t val) { if (UPB_LIKELY(val < 64)) { - const uint64_t mask = e->data[0] | ((uint64_t)e->data[1] << 32); + const uint64_t mask = + e->UPB_PRIVATE(data)[0] | ((uint64_t)e->UPB_PRIVATE(data)[1] << 32); const uint64_t bit = 1ULL << val; return (mask & bit) != 0; } - if (UPB_LIKELY(val < e->mask_limit)) { - const uint32_t mask = e->data[val / 32]; + if (UPB_LIKELY(val < e->UPB_PRIVATE(mask_limit))) { + const uint32_t mask = e->UPB_PRIVATE(data)[val / 32]; const uint32_t bit = 1ULL << (val % 32); return (mask & bit) != 0; } // OPT: binary search long lists? - const uint32_t* start = &e->data[e->mask_limit / 32]; - const uint32_t* limit = &e->data[e->mask_limit / 32 + e->value_count]; + const uint32_t* start = + &e->UPB_PRIVATE(data)[e->UPB_PRIVATE(mask_limit) / 32]; + const uint32_t* limit = &e->UPB_PRIVATE( + data)[e->UPB_PRIVATE(mask_limit) / 32 + e->UPB_PRIVATE(value_count)]; for (const uint32_t* p = start; p < limit; p++) { if (*p == val) return true; } @@ -12170,10 +12173,6 @@ bool _upb_mapsorter_pushexts(_upb_mapsorter* s, #endif /* UPB_COLLECTIONS_INTERNAL_MAP_SORTER_H_ */ -#ifndef UPB_MINI_DESCRIPTOR_INTERNAL_DECODER_H_ -#define UPB_MINI_DESCRIPTOR_INTERNAL_DECODER_H_ - - #ifndef UPB_MINI_DESCRIPTOR_INTERNAL_BASE92_H_ #define UPB_MINI_DESCRIPTOR_INTERNAL_BASE92_H_ @@ -12228,6 +12227,10 @@ UPB_INLINE const char* _upb_Base92_DecodeVarint(const char* ptr, #endif // UPB_MINI_DESCRIPTOR_INTERNAL_BASE92_H_ +#ifndef UPB_MINI_DESCRIPTOR_INTERNAL_DECODER_H_ +#define UPB_MINI_DESCRIPTOR_INTERNAL_DECODER_H_ + + // Must be last. // upb_MdDecoder: used internally for decoding MiniDescriptors for messages, diff --git a/ruby/ext/google/protobuf_c/ruby-upb.c b/ruby/ext/google/protobuf_c/ruby-upb.c index dab723bc6e..5a479fab43 100644 --- a/ruby/ext/google/protobuf_c/ruby-upb.c +++ b/ruby/ext/google/protobuf_c/ruby-upb.c @@ -6229,6 +6229,9 @@ size_t upb_Message_ExtensionCount(const upb_Message* msg) { } +#include +#include + // Must be last. @@ -6254,26 +6257,27 @@ static upb_MiniTableEnum* _upb_MiniTable_AddEnumDataMember(upb_MdEnumDecoder* d, d->enum_table = upb_Arena_Realloc(d->arena, d->enum_table, old_sz, new_sz); upb_MdDecoder_CheckOutOfMemory(&d->base, d->enum_table); } - d->enum_table->data[d->enum_data_count++] = val; + d->enum_table->UPB_PRIVATE(data)[d->enum_data_count++] = val; return d->enum_table; } static void upb_MiniTableEnum_BuildValue(upb_MdEnumDecoder* d, uint32_t val) { upb_MiniTableEnum* table = d->enum_table; d->enum_value_count++; - if (table->value_count || (val > 512 && d->enum_value_count < val / 32)) { - if (table->value_count == 0) { - assert(d->enum_data_count == table->mask_limit / 32); + if (table->UPB_PRIVATE(value_count) || + (val > 512 && d->enum_value_count < val / 32)) { + if (table->UPB_PRIVATE(value_count) == 0) { + UPB_ASSERT(d->enum_data_count == table->UPB_PRIVATE(mask_limit) / 32); } table = _upb_MiniTable_AddEnumDataMember(d, val); - table->value_count++; + table->UPB_PRIVATE(value_count)++; } else { uint32_t new_mask_limit = ((val / 32) + 1) * 32; - while (table->mask_limit < new_mask_limit) { + while (table->UPB_PRIVATE(mask_limit) < new_mask_limit) { table = _upb_MiniTable_AddEnumDataMember(d, 0); - table->mask_limit += 32; + table->UPB_PRIVATE(mask_limit) += 32; } - table->data[val / 32] |= 1ULL << (val % 32); + table->UPB_PRIVATE(data)[val / 32] |= 1ULL << (val % 32); } } @@ -6291,11 +6295,11 @@ static upb_MiniTableEnum* upb_MtDecoder_DoBuildMiniTableEnum( upb_MdDecoder_CheckOutOfMemory(&d->base, d->enum_table); // Guarantee at least 64 bits of mask without checking mask size. - d->enum_table->mask_limit = 64; + d->enum_table->UPB_PRIVATE(mask_limit) = 64; d->enum_table = _upb_MiniTable_AddEnumDataMember(d, 0); d->enum_table = _upb_MiniTable_AddEnumDataMember(d, 0); - d->enum_table->value_count = 0; + d->enum_table->UPB_PRIVATE(value_count) = 0; const char* ptr = data; uint32_t base = 0; @@ -6323,7 +6327,8 @@ static upb_MiniTableEnum* upb_MtDecoder_DoBuildMiniTableEnum( } static upb_MiniTableEnum* upb_MtDecoder_BuildMiniTableEnum( - upb_MdEnumDecoder* const decoder, const char* const data, size_t const len) { + upb_MdEnumDecoder* const decoder, const char* const data, + size_t const len) { if (UPB_SETJMP(decoder->base.err) != 0) return NULL; return upb_MtDecoder_DoBuildMiniTableEnum(decoder, data, len); } diff --git a/ruby/ext/google/protobuf_c/ruby-upb.h b/ruby/ext/google/protobuf_c/ruby-upb.h index d2a531c60e..a3ff8a8d20 100755 --- a/ruby/ext/google/protobuf_c/ruby-upb.h +++ b/ruby/ext/google/protobuf_c/ruby-upb.h @@ -935,9 +935,9 @@ UPB_API void* upb_Array_MutableDataPtr(upb_Array* arr); // Must be last. struct upb_MiniTableEnum { - uint32_t mask_limit; // Limit enum value that can be tested with mask. - uint32_t value_count; // Number of values after the bitfield. - uint32_t data[]; // Bitmask + enumerated values follow. + uint32_t UPB_PRIVATE(mask_limit); // Highest that can be tested with mask. + uint32_t UPB_PRIVATE(value_count); // Number of values after the bitfield. + uint32_t UPB_PRIVATE(data)[]; // Bitmask + enumerated values follow. }; #ifdef __cplusplus @@ -947,19 +947,22 @@ extern "C" { UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableEnum_CheckValue)( const struct upb_MiniTableEnum* e, uint32_t val) { if (UPB_LIKELY(val < 64)) { - const uint64_t mask = e->data[0] | ((uint64_t)e->data[1] << 32); + const uint64_t mask = + e->UPB_PRIVATE(data)[0] | ((uint64_t)e->UPB_PRIVATE(data)[1] << 32); const uint64_t bit = 1ULL << val; return (mask & bit) != 0; } - if (UPB_LIKELY(val < e->mask_limit)) { - const uint32_t mask = e->data[val / 32]; + if (UPB_LIKELY(val < e->UPB_PRIVATE(mask_limit))) { + const uint32_t mask = e->UPB_PRIVATE(data)[val / 32]; const uint32_t bit = 1ULL << (val % 32); return (mask & bit) != 0; } // OPT: binary search long lists? - const uint32_t* start = &e->data[e->mask_limit / 32]; - const uint32_t* limit = &e->data[e->mask_limit / 32 + e->value_count]; + const uint32_t* start = + &e->UPB_PRIVATE(data)[e->UPB_PRIVATE(mask_limit) / 32]; + const uint32_t* limit = &e->UPB_PRIVATE( + data)[e->UPB_PRIVATE(mask_limit) / 32 + e->UPB_PRIVATE(value_count)]; for (const uint32_t* p = start; p < limit; p++) { if (*p == val) return true; } @@ -11942,10 +11945,6 @@ bool _upb_mapsorter_pushexts(_upb_mapsorter* s, #endif /* UPB_COLLECTIONS_INTERNAL_MAP_SORTER_H_ */ -#ifndef UPB_MINI_DESCRIPTOR_INTERNAL_DECODER_H_ -#define UPB_MINI_DESCRIPTOR_INTERNAL_DECODER_H_ - - #ifndef UPB_MINI_DESCRIPTOR_INTERNAL_BASE92_H_ #define UPB_MINI_DESCRIPTOR_INTERNAL_BASE92_H_ @@ -12000,6 +11999,10 @@ UPB_INLINE const char* _upb_Base92_DecodeVarint(const char* ptr, #endif // UPB_MINI_DESCRIPTOR_INTERNAL_BASE92_H_ +#ifndef UPB_MINI_DESCRIPTOR_INTERNAL_DECODER_H_ +#define UPB_MINI_DESCRIPTOR_INTERNAL_DECODER_H_ + + // Must be last. // upb_MdDecoder: used internally for decoding MiniDescriptors for messages,