diff --git a/php/ext/google/protobuf/php-upb.c b/php/ext/google/protobuf/php-upb.c index 36befb2bc8..f86e69310e 100644 --- a/php/ext/google/protobuf/php-upb.c +++ b/php/ext/google/protobuf/php-upb.c @@ -8834,6 +8834,10 @@ bool _upb_DescState_Grow(upb_DescState* d, upb_Arena* a) { } +#include +#include +#include + // Must be last. @@ -9089,8 +9093,7 @@ static void create_enumdef(upb_DefBuilder* ctx, const char* prefix, if (upb_EnumDef_IsClosed(e)) { if (ctx->layout) { - UPB_ASSERT(ctx->enum_count < ctx->layout->enum_count); - e->layout = ctx->layout->enums[ctx->enum_count++]; + e->layout = upb_MiniTableFile_Enum(ctx->layout, ctx->enum_count++); } else { e->layout = create_enumlayout(ctx, e); } @@ -10344,6 +10347,8 @@ void _upb_FieldDef_Resolve(upb_DefBuilder* ctx, const char* prefix, #include +#include +#include // Must be last. @@ -10586,11 +10591,12 @@ void _upb_FileDef_Create(upb_DefBuilder* ctx, if (ctx->layout) { // We are using the ext layouts that were passed in. - file->ext_layouts = ctx->layout->exts; - if (ctx->layout->ext_count != file->ext_count) { + file->ext_layouts = ctx->layout->UPB_PRIVATE(exts); + const int mt_ext_count = upb_MiniTableFile_ExtensionCount(ctx->layout); + if (mt_ext_count != file->ext_count) { _upb_DefBuilder_Errf(ctx, "Extension count did not match layout (%d vs %d)", - ctx->layout->ext_count, file->ext_count); + mt_ext_count, file->ext_count); } } else { // We are building ext layouts from scratch. @@ -11368,6 +11374,10 @@ bool upb_Message_DiscardUnknown(upb_Message* msg, const upb_MessageDef* m, } +#include +#include +#include + // Must be last. @@ -11780,8 +11790,7 @@ void _upb_MessageDef_CreateMiniTable(upb_DefBuilder* ctx, upb_MessageDef* m) { if (ctx->layout == NULL) { m->layout = _upb_MessageDef_MakeMiniTable(ctx, m); } else { - UPB_ASSERT(ctx->msg_count < ctx->layout->msg_count); - m->layout = ctx->layout->msgs[ctx->msg_count++]; + m->layout = upb_MiniTableFile_Message(ctx->layout, ctx->msg_count++); UPB_ASSERT(m->field_count == m->layout->field_count); // We don't need the result of this call, but it will assign layout_index diff --git a/php/ext/google/protobuf/php-upb.h b/php/ext/google/protobuf/php-upb.h index b4f9b21ebe..7487b33e0c 100644 --- a/php/ext/google/protobuf/php-upb.h +++ b/php/ext/google/protobuf/php-upb.h @@ -3441,19 +3441,99 @@ upb_MiniTable* upb_MiniTable_BuildWithBuf(const char* data, size_t len, // Must be last. struct upb_MiniTableFile { - const struct upb_MiniTable** msgs; - const struct upb_MiniTableEnum** enums; - const struct upb_MiniTableExtension** exts; - int msg_count; - int enum_count; - int ext_count; + const struct upb_MiniTable** UPB_PRIVATE(msgs); + const struct upb_MiniTableEnum** UPB_PRIVATE(enums); + const struct upb_MiniTableExtension** UPB_PRIVATE(exts); + int UPB_PRIVATE(msg_count); + int UPB_PRIVATE(enum_count); + int UPB_PRIVATE(ext_count); }; +#ifdef __cplusplus +extern "C" { +#endif + +UPB_INLINE int UPB_PRIVATE(_upb_MiniTableFile_EnumCount)( + const struct upb_MiniTableFile* f) { + return f->UPB_PRIVATE(enum_count); +} + +UPB_INLINE int UPB_PRIVATE(_upb_MiniTableFile_ExtensionCount)( + const struct upb_MiniTableFile* f) { + return f->UPB_PRIVATE(ext_count); +} + +UPB_INLINE int UPB_PRIVATE(_upb_MiniTableFile_MessageCount)( + const struct upb_MiniTableFile* f) { + return f->UPB_PRIVATE(msg_count); +} + +UPB_INLINE const struct upb_MiniTableEnum* UPB_PRIVATE(_upb_MiniTableFile_Enum)( + const struct upb_MiniTableFile* f, int i) { + UPB_ASSERT(i < f->UPB_PRIVATE(enum_count)); + return f->UPB_PRIVATE(enums)[i]; +} + +UPB_INLINE const struct upb_MiniTableExtension* UPB_PRIVATE( + _upb_MiniTableFile_Extension)(const struct upb_MiniTableFile* f, int i) { + UPB_ASSERT(i < f->UPB_PRIVATE(ext_count)); + return f->UPB_PRIVATE(exts)[i]; +} + +UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE(_upb_MiniTableFile_Message)( + const struct upb_MiniTableFile* f, int i) { + UPB_ASSERT(i < f->UPB_PRIVATE(msg_count)); + return f->UPB_PRIVATE(msgs)[i]; +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif + #endif /* UPB_MINI_TABLE_INTERNAL_FILE_H_ */ typedef struct upb_MiniTableFile upb_MiniTableFile; +// Must be last. + +#ifdef __cplusplus +extern "C" { +#endif + +UPB_API_INLINE const struct upb_MiniTableEnum* upb_MiniTableFile_Enum( + const upb_MiniTableFile* f, int i) { + return UPB_PRIVATE(_upb_MiniTableFile_Enum)(f, i); +} + +UPB_API_INLINE int upb_MiniTableFile_EnumCount(const upb_MiniTableFile* f) { + return UPB_PRIVATE(_upb_MiniTableFile_EnumCount)(f); +} + +UPB_API_INLINE const struct upb_MiniTableExtension* upb_MiniTableFile_Extension( + const upb_MiniTableFile* f, int i) { + return UPB_PRIVATE(_upb_MiniTableFile_Extension)(f, i); +} + +UPB_API_INLINE int upb_MiniTableFile_ExtensionCount( + const upb_MiniTableFile* f) { + return UPB_PRIVATE(_upb_MiniTableFile_ExtensionCount)(f); +} + +UPB_API_INLINE const struct upb_MiniTable* upb_MiniTableFile_Message( + const upb_MiniTableFile* f, int i) { + return UPB_PRIVATE(_upb_MiniTableFile_Message)(f, i); +} + +UPB_API_INLINE int upb_MiniTableFile_MessageCount(const upb_MiniTableFile* f) { + return UPB_PRIVATE(_upb_MiniTableFile_MessageCount)(f); +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif + + #endif /* UPB_MINI_TABLE_FILE_H_ */ // upb_decode: parsing into a upb_Message using a upb_MiniTable. diff --git a/ruby/ext/google/protobuf_c/ruby-upb.c b/ruby/ext/google/protobuf_c/ruby-upb.c index dfdc4830e3..6dfc0f74da 100644 --- a/ruby/ext/google/protobuf_c/ruby-upb.c +++ b/ruby/ext/google/protobuf_c/ruby-upb.c @@ -8349,6 +8349,10 @@ bool _upb_DescState_Grow(upb_DescState* d, upb_Arena* a) { } +#include +#include +#include + // Must be last. @@ -8604,8 +8608,7 @@ static void create_enumdef(upb_DefBuilder* ctx, const char* prefix, if (upb_EnumDef_IsClosed(e)) { if (ctx->layout) { - UPB_ASSERT(ctx->enum_count < ctx->layout->enum_count); - e->layout = ctx->layout->enums[ctx->enum_count++]; + e->layout = upb_MiniTableFile_Enum(ctx->layout, ctx->enum_count++); } else { e->layout = create_enumlayout(ctx, e); } @@ -9859,6 +9862,8 @@ void _upb_FieldDef_Resolve(upb_DefBuilder* ctx, const char* prefix, #include +#include +#include // Must be last. @@ -10101,11 +10106,12 @@ void _upb_FileDef_Create(upb_DefBuilder* ctx, if (ctx->layout) { // We are using the ext layouts that were passed in. - file->ext_layouts = ctx->layout->exts; - if (ctx->layout->ext_count != file->ext_count) { + file->ext_layouts = ctx->layout->UPB_PRIVATE(exts); + const int mt_ext_count = upb_MiniTableFile_ExtensionCount(ctx->layout); + if (mt_ext_count != file->ext_count) { _upb_DefBuilder_Errf(ctx, "Extension count did not match layout (%d vs %d)", - ctx->layout->ext_count, file->ext_count); + mt_ext_count, file->ext_count); } } else { // We are building ext layouts from scratch. @@ -10883,6 +10889,10 @@ bool upb_Message_DiscardUnknown(upb_Message* msg, const upb_MessageDef* m, } +#include +#include +#include + // Must be last. @@ -11295,8 +11305,7 @@ void _upb_MessageDef_CreateMiniTable(upb_DefBuilder* ctx, upb_MessageDef* m) { if (ctx->layout == NULL) { m->layout = _upb_MessageDef_MakeMiniTable(ctx, m); } else { - UPB_ASSERT(ctx->msg_count < ctx->layout->msg_count); - m->layout = ctx->layout->msgs[ctx->msg_count++]; + m->layout = upb_MiniTableFile_Message(ctx->layout, ctx->msg_count++); UPB_ASSERT(m->field_count == m->layout->field_count); // We don't need the result of this call, but it will assign layout_index diff --git a/ruby/ext/google/protobuf_c/ruby-upb.h b/ruby/ext/google/protobuf_c/ruby-upb.h index ac2300032f..6d464b31d1 100755 --- a/ruby/ext/google/protobuf_c/ruby-upb.h +++ b/ruby/ext/google/protobuf_c/ruby-upb.h @@ -3443,19 +3443,99 @@ upb_MiniTable* upb_MiniTable_BuildWithBuf(const char* data, size_t len, // Must be last. struct upb_MiniTableFile { - const struct upb_MiniTable** msgs; - const struct upb_MiniTableEnum** enums; - const struct upb_MiniTableExtension** exts; - int msg_count; - int enum_count; - int ext_count; + const struct upb_MiniTable** UPB_PRIVATE(msgs); + const struct upb_MiniTableEnum** UPB_PRIVATE(enums); + const struct upb_MiniTableExtension** UPB_PRIVATE(exts); + int UPB_PRIVATE(msg_count); + int UPB_PRIVATE(enum_count); + int UPB_PRIVATE(ext_count); }; +#ifdef __cplusplus +extern "C" { +#endif + +UPB_INLINE int UPB_PRIVATE(_upb_MiniTableFile_EnumCount)( + const struct upb_MiniTableFile* f) { + return f->UPB_PRIVATE(enum_count); +} + +UPB_INLINE int UPB_PRIVATE(_upb_MiniTableFile_ExtensionCount)( + const struct upb_MiniTableFile* f) { + return f->UPB_PRIVATE(ext_count); +} + +UPB_INLINE int UPB_PRIVATE(_upb_MiniTableFile_MessageCount)( + const struct upb_MiniTableFile* f) { + return f->UPB_PRIVATE(msg_count); +} + +UPB_INLINE const struct upb_MiniTableEnum* UPB_PRIVATE(_upb_MiniTableFile_Enum)( + const struct upb_MiniTableFile* f, int i) { + UPB_ASSERT(i < f->UPB_PRIVATE(enum_count)); + return f->UPB_PRIVATE(enums)[i]; +} + +UPB_INLINE const struct upb_MiniTableExtension* UPB_PRIVATE( + _upb_MiniTableFile_Extension)(const struct upb_MiniTableFile* f, int i) { + UPB_ASSERT(i < f->UPB_PRIVATE(ext_count)); + return f->UPB_PRIVATE(exts)[i]; +} + +UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE(_upb_MiniTableFile_Message)( + const struct upb_MiniTableFile* f, int i) { + UPB_ASSERT(i < f->UPB_PRIVATE(msg_count)); + return f->UPB_PRIVATE(msgs)[i]; +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif + #endif /* UPB_MINI_TABLE_INTERNAL_FILE_H_ */ typedef struct upb_MiniTableFile upb_MiniTableFile; +// Must be last. + +#ifdef __cplusplus +extern "C" { +#endif + +UPB_API_INLINE const struct upb_MiniTableEnum* upb_MiniTableFile_Enum( + const upb_MiniTableFile* f, int i) { + return UPB_PRIVATE(_upb_MiniTableFile_Enum)(f, i); +} + +UPB_API_INLINE int upb_MiniTableFile_EnumCount(const upb_MiniTableFile* f) { + return UPB_PRIVATE(_upb_MiniTableFile_EnumCount)(f); +} + +UPB_API_INLINE const struct upb_MiniTableExtension* upb_MiniTableFile_Extension( + const upb_MiniTableFile* f, int i) { + return UPB_PRIVATE(_upb_MiniTableFile_Extension)(f, i); +} + +UPB_API_INLINE int upb_MiniTableFile_ExtensionCount( + const upb_MiniTableFile* f) { + return UPB_PRIVATE(_upb_MiniTableFile_ExtensionCount)(f); +} + +UPB_API_INLINE const struct upb_MiniTable* upb_MiniTableFile_Message( + const upb_MiniTableFile* f, int i) { + return UPB_PRIVATE(_upb_MiniTableFile_Message)(f, i); +} + +UPB_API_INLINE int upb_MiniTableFile_MessageCount(const upb_MiniTableFile* f) { + return UPB_PRIVATE(_upb_MiniTableFile_MessageCount)(f); +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif + + #endif /* UPB_MINI_TABLE_FILE_H_ */ // upb_decode: parsing into a upb_Message using a upb_MiniTable.