Auto-generate files after cl/944789082
diff --git a/php/ext/google/protobuf/php-upb.c b/php/ext/google/protobuf/php-upb.c index 67c338b..60c98d2 100644 --- a/php/ext/google/protobuf/php-upb.c +++ b/php/ext/google/protobuf/php-upb.c
@@ -8992,6 +8992,61 @@ // Must be last. +static upb_FindUnknownRet2 upb_FindUnknownRet2_ParseError(void) { + return (upb_FindUnknownRet2){.status = kUpb_FindUnknown_ParseError}; +} + +upb_FindUnknownRet2 upb_Message_FindUnknown2(const struct upb_Message* msg, + uint32_t field_number, + int depth_limit) { + depth_limit = depth_limit ? depth_limit : 100; + upb_FindUnknownRet2 ret; + ret.iter = kUpb_Message_UnknownBegin; + while (upb_Message_NextUnknown2(msg, &ret.unknown, &ret.iter)) { + if (ret.unknown.type == kUpb_MessageUnknownType_StringView) { + upb_EpsCopyInputStream stream; + const char* ptr = ret.unknown.value.bytes.data; + upb_EpsCopyInputStream_Init(&stream, &ptr, ret.unknown.value.bytes.size); + + while (!upb_EpsCopyInputStream_IsDone(&stream, &ptr)) { + uint32_t tag; + const char* unknown_begin = ptr; + ptr = upb_WireReader_ReadTag(ptr, &tag, &stream); + if (!ptr) return upb_FindUnknownRet2_ParseError(); + if (field_number == upb_WireReader_GetFieldNumber(tag)) { + upb_StringView data; + ret.status = kUpb_FindUnknown_Ok; + upb_EpsCopyCapture capture; + upb_EpsCopyCapture_Start(&capture, &stream, unknown_begin); + ptr = _upb_WireReader_SkipValue(ptr, tag, depth_limit, &stream); + if (!ptr || !upb_EpsCopyCapture_End(&capture, &stream, ptr, &data)) { + return upb_FindUnknownRet2_ParseError(); + } + ret.unknown.value.bytes = data; + return ret; + } + + ptr = _upb_WireReader_SkipValue(ptr, tag, depth_limit, &stream); + if (!ptr) return upb_FindUnknownRet2_ParseError(); + } + } else if (ret.unknown.type == + kUpb_MessageUnknownType_NonCanonicalExtension) { + uint32_t ext_field_number = + upb_MiniTableExtension_Number(ret.unknown.value.extension->ext); + if (ext_field_number == field_number) { + ret.status = kUpb_FindUnknown_Ok; + return ret; + } + } + } + ret.status = kUpb_FindUnknown_NotPresent; + ret.unknown.type = kUpb_MessageUnknownType_StringView; + ret.unknown.value.bytes.data = NULL; + ret.unknown.value.bytes.size = 0; + ret.iter = kUpb_Message_UnknownBegin; + return ret; +} + upb_Message_DeleteUnknownStatus upb_Message_DeleteUnknown2( struct upb_Message* msg, struct upb_MessageUnknown* data, uintptr_t* iter, struct upb_Arena* arena) {
diff --git a/php/ext/google/protobuf/php-upb.h b/php/ext/google/protobuf/php-upb.h index 299b1ec..dd943a7 100644 --- a/php/ext/google/protobuf/php-upb.h +++ b/php/ext/google/protobuf/php-upb.h
@@ -16554,6 +16554,32 @@ return false; } +typedef enum { + kUpb_FindUnknown_Ok, + kUpb_FindUnknown_NotPresent, + kUpb_FindUnknown_ParseError, +} upb_FindUnknown_Status; + +typedef struct { + upb_FindUnknown_Status status; + struct upb_MessageUnknown unknown; + uintptr_t iter; +} upb_FindUnknownRet2; + +// Finds first occurrence of unknown data (upb_MessageUnknown) by tag id in +// message, including unknown upb_StringView and non-canonical extensions +// (upb_Extension*). +// +// If multiple matching entries exist for the same field number (e.g. both a +// raw unknown upb_StringView and a non-canonical extension), this function +// returns the one encountered first in internal iteration order (which follows +// the order they were added or parsed). +// +// A depth_limit of zero means to just use the upb default depth limit. +upb_FindUnknownRet2 upb_Message_FindUnknown2(const struct upb_Message* msg, + uint32_t field_number, + int depth_limit); + // Removes a segment of unknown data from the message, advancing to the next // segment. Returns false if the removed segment was at the end of the last // chunk. @@ -16594,131 +16620,6 @@ #endif /* UPB_MESSAGE_UNKNOWN_FIELDS_H_ */ -#ifndef UPB_MESSAGE_COMPARE_H_ -#define UPB_MESSAGE_COMPARE_H_ - -#include <stddef.h> - - -// Must be last. - -enum { - // If set, upb_Message_IsEqual() will attempt to compare unknown fields. - // By its very nature this comparison is inexact. - kUpb_CompareOption_IncludeUnknownFields = (1 << 0) -}; - -#ifdef __cplusplus -extern "C" { -#endif - -// Returns true if no known fields or extensions are set in the message. -UPB_API bool upb_Message_IsEmpty(const upb_Message* msg, - const upb_MiniTable* m); - -UPB_API bool upb_Message_IsEqual(const upb_Message* msg1, - const upb_Message* msg2, - const upb_MiniTable* m, int options); - -// If |ctype| is a message then |m| must point to its minitable. -UPB_API_INLINE bool upb_MessageValue_IsEqual(upb_MessageValue val1, - upb_MessageValue val2, - upb_CType ctype, - const upb_MiniTable* m, - int options) { - switch (ctype) { - case kUpb_CType_Bool: - return val1.bool_val == val2.bool_val; - - case kUpb_CType_Float: - case kUpb_CType_Int32: - case kUpb_CType_UInt32: - case kUpb_CType_Enum: - return val1.int32_val == val2.int32_val; - - case kUpb_CType_Double: - case kUpb_CType_Int64: - case kUpb_CType_UInt64: - return val1.int64_val == val2.int64_val; - - case kUpb_CType_String: - case kUpb_CType_Bytes: - return upb_StringView_IsEqual(val1.str_val, val2.str_val); - - case kUpb_CType_Message: - return upb_Message_IsEqual(val1.msg_val, val2.msg_val, m, options); - - default: - UPB_UNREACHABLE(); - return false; - } -} - -#ifdef __cplusplus -} /* extern "C" */ -#endif - - -#endif // UPB_MESSAGE_COMPARE_H_ - -#ifndef UPB_MESSAGE_INTERNAL_COMPARE_UNKNOWN_H_ -#define UPB_MESSAGE_INTERNAL_COMPARE_UNKNOWN_H_ - -#include <stddef.h> - -// Must be last. - -#ifdef __cplusplus -extern "C" { -#endif - -// Returns true if unknown fields from the two messages are equal when sorted -// and varints are made canonical. -// -// This function is discouraged, as the comparison is inherently lossy without -// schema data: -// -// 1. We don't know whether delimited fields are sub-messages. Unknown -// sub-messages will therefore not have their fields sorted and varints -// canonicalized. -// 2. We don't know about oneof/non-repeated fields, which should semantically -// discard every value except the last. - -typedef enum { - kUpb_UnknownCompareResult_Equal = 0, - kUpb_UnknownCompareResult_NotEqual = 1, - kUpb_UnknownCompareResult_OutOfMemory = 2, - kUpb_UnknownCompareResult_MaxDepthExceeded = 3, -} upb_UnknownCompareResult; - -upb_UnknownCompareResult UPB_PRIVATE(_upb_Message_UnknownFieldsAreEqual)( - const upb_Message* msg1, const upb_Message* msg2, int max_depth); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - - -#endif /* UPB_MESSAGE_INTERNAL_COMPARE_UNKNOWN_H_ */ - -#ifndef GOOGLE_UPB_UPB_MESSAGE_INTERNAL_ITERATOR_H__ -#define GOOGLE_UPB_UPB_MESSAGE_INTERNAL_ITERATOR_H__ - -#include <stddef.h> -#include <stdint.h> - - -// Must be last. - -#define kUpb_BaseField_Begin ((size_t)-1) -bool UPB_PRIVATE(_upb_Message_NextBaseField)(const upb_Message* msg, - const upb_MiniTable* m, - const upb_MiniTableField** out_f, - upb_MessageValue* out_v, - uintptr_t* iter); - -#endif // GOOGLE_UPB_UPB_MESSAGE_INTERNAL_ITERATOR_H__ - #ifndef UPB_WIRE_EPS_COPY_INPUT_STREAM_H_ #define UPB_WIRE_EPS_COPY_INPUT_STREAM_H_ @@ -17504,6 +17405,131 @@ #endif // UPB_WIRE_READER_H_ +#ifndef UPB_MESSAGE_COMPARE_H_ +#define UPB_MESSAGE_COMPARE_H_ + +#include <stddef.h> + + +// Must be last. + +enum { + // If set, upb_Message_IsEqual() will attempt to compare unknown fields. + // By its very nature this comparison is inexact. + kUpb_CompareOption_IncludeUnknownFields = (1 << 0) +}; + +#ifdef __cplusplus +extern "C" { +#endif + +// Returns true if no known fields or extensions are set in the message. +UPB_API bool upb_Message_IsEmpty(const upb_Message* msg, + const upb_MiniTable* m); + +UPB_API bool upb_Message_IsEqual(const upb_Message* msg1, + const upb_Message* msg2, + const upb_MiniTable* m, int options); + +// If |ctype| is a message then |m| must point to its minitable. +UPB_API_INLINE bool upb_MessageValue_IsEqual(upb_MessageValue val1, + upb_MessageValue val2, + upb_CType ctype, + const upb_MiniTable* m, + int options) { + switch (ctype) { + case kUpb_CType_Bool: + return val1.bool_val == val2.bool_val; + + case kUpb_CType_Float: + case kUpb_CType_Int32: + case kUpb_CType_UInt32: + case kUpb_CType_Enum: + return val1.int32_val == val2.int32_val; + + case kUpb_CType_Double: + case kUpb_CType_Int64: + case kUpb_CType_UInt64: + return val1.int64_val == val2.int64_val; + + case kUpb_CType_String: + case kUpb_CType_Bytes: + return upb_StringView_IsEqual(val1.str_val, val2.str_val); + + case kUpb_CType_Message: + return upb_Message_IsEqual(val1.msg_val, val2.msg_val, m, options); + + default: + UPB_UNREACHABLE(); + return false; + } +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif + + +#endif // UPB_MESSAGE_COMPARE_H_ + +#ifndef UPB_MESSAGE_INTERNAL_COMPARE_UNKNOWN_H_ +#define UPB_MESSAGE_INTERNAL_COMPARE_UNKNOWN_H_ + +#include <stddef.h> + +// Must be last. + +#ifdef __cplusplus +extern "C" { +#endif + +// Returns true if unknown fields from the two messages are equal when sorted +// and varints are made canonical. +// +// This function is discouraged, as the comparison is inherently lossy without +// schema data: +// +// 1. We don't know whether delimited fields are sub-messages. Unknown +// sub-messages will therefore not have their fields sorted and varints +// canonicalized. +// 2. We don't know about oneof/non-repeated fields, which should semantically +// discard every value except the last. + +typedef enum { + kUpb_UnknownCompareResult_Equal = 0, + kUpb_UnknownCompareResult_NotEqual = 1, + kUpb_UnknownCompareResult_OutOfMemory = 2, + kUpb_UnknownCompareResult_MaxDepthExceeded = 3, +} upb_UnknownCompareResult; + +upb_UnknownCompareResult UPB_PRIVATE(_upb_Message_UnknownFieldsAreEqual)( + const upb_Message* msg1, const upb_Message* msg2, int max_depth); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + + +#endif /* UPB_MESSAGE_INTERNAL_COMPARE_UNKNOWN_H_ */ + +#ifndef GOOGLE_UPB_UPB_MESSAGE_INTERNAL_ITERATOR_H__ +#define GOOGLE_UPB_UPB_MESSAGE_INTERNAL_ITERATOR_H__ + +#include <stddef.h> +#include <stdint.h> + + +// Must be last. + +#define kUpb_BaseField_Begin ((size_t)-1) +bool UPB_PRIVATE(_upb_Message_NextBaseField)(const upb_Message* msg, + const upb_MiniTable* m, + const upb_MiniTableField** out_f, + upb_MessageValue* out_v, + uintptr_t* iter); + +#endif // GOOGLE_UPB_UPB_MESSAGE_INTERNAL_ITERATOR_H__ + #ifndef UPB_MESSAGE_COPY_H_ #define UPB_MESSAGE_COPY_H_
diff --git a/ruby/ext/google/protobuf_c/ruby-upb.c b/ruby/ext/google/protobuf_c/ruby-upb.c index 78036b5..33ee082 100644 --- a/ruby/ext/google/protobuf_c/ruby-upb.c +++ b/ruby/ext/google/protobuf_c/ruby-upb.c
@@ -7797,6 +7797,61 @@ // Must be last. +static upb_FindUnknownRet2 upb_FindUnknownRet2_ParseError(void) { + return (upb_FindUnknownRet2){.status = kUpb_FindUnknown_ParseError}; +} + +upb_FindUnknownRet2 upb_Message_FindUnknown2(const struct upb_Message* msg, + uint32_t field_number, + int depth_limit) { + depth_limit = depth_limit ? depth_limit : 100; + upb_FindUnknownRet2 ret; + ret.iter = kUpb_Message_UnknownBegin; + while (upb_Message_NextUnknown2(msg, &ret.unknown, &ret.iter)) { + if (ret.unknown.type == kUpb_MessageUnknownType_StringView) { + upb_EpsCopyInputStream stream; + const char* ptr = ret.unknown.value.bytes.data; + upb_EpsCopyInputStream_Init(&stream, &ptr, ret.unknown.value.bytes.size); + + while (!upb_EpsCopyInputStream_IsDone(&stream, &ptr)) { + uint32_t tag; + const char* unknown_begin = ptr; + ptr = upb_WireReader_ReadTag(ptr, &tag, &stream); + if (!ptr) return upb_FindUnknownRet2_ParseError(); + if (field_number == upb_WireReader_GetFieldNumber(tag)) { + upb_StringView data; + ret.status = kUpb_FindUnknown_Ok; + upb_EpsCopyCapture capture; + upb_EpsCopyCapture_Start(&capture, &stream, unknown_begin); + ptr = _upb_WireReader_SkipValue(ptr, tag, depth_limit, &stream); + if (!ptr || !upb_EpsCopyCapture_End(&capture, &stream, ptr, &data)) { + return upb_FindUnknownRet2_ParseError(); + } + ret.unknown.value.bytes = data; + return ret; + } + + ptr = _upb_WireReader_SkipValue(ptr, tag, depth_limit, &stream); + if (!ptr) return upb_FindUnknownRet2_ParseError(); + } + } else if (ret.unknown.type == + kUpb_MessageUnknownType_NonCanonicalExtension) { + uint32_t ext_field_number = + upb_MiniTableExtension_Number(ret.unknown.value.extension->ext); + if (ext_field_number == field_number) { + ret.status = kUpb_FindUnknown_Ok; + return ret; + } + } + } + ret.status = kUpb_FindUnknown_NotPresent; + ret.unknown.type = kUpb_MessageUnknownType_StringView; + ret.unknown.value.bytes.data = NULL; + ret.unknown.value.bytes.size = 0; + ret.iter = kUpb_Message_UnknownBegin; + return ret; +} + upb_Message_DeleteUnknownStatus upb_Message_DeleteUnknown2( struct upb_Message* msg, struct upb_MessageUnknown* data, uintptr_t* iter, struct upb_Arena* arena) {
diff --git a/ruby/ext/google/protobuf_c/ruby-upb.h b/ruby/ext/google/protobuf_c/ruby-upb.h index 9c5d6d7..92128cd 100755 --- a/ruby/ext/google/protobuf_c/ruby-upb.h +++ b/ruby/ext/google/protobuf_c/ruby-upb.h
@@ -16301,6 +16301,32 @@ return false; } +typedef enum { + kUpb_FindUnknown_Ok, + kUpb_FindUnknown_NotPresent, + kUpb_FindUnknown_ParseError, +} upb_FindUnknown_Status; + +typedef struct { + upb_FindUnknown_Status status; + struct upb_MessageUnknown unknown; + uintptr_t iter; +} upb_FindUnknownRet2; + +// Finds first occurrence of unknown data (upb_MessageUnknown) by tag id in +// message, including unknown upb_StringView and non-canonical extensions +// (upb_Extension*). +// +// If multiple matching entries exist for the same field number (e.g. both a +// raw unknown upb_StringView and a non-canonical extension), this function +// returns the one encountered first in internal iteration order (which follows +// the order they were added or parsed). +// +// A depth_limit of zero means to just use the upb default depth limit. +upb_FindUnknownRet2 upb_Message_FindUnknown2(const struct upb_Message* msg, + uint32_t field_number, + int depth_limit); + // Removes a segment of unknown data from the message, advancing to the next // segment. Returns false if the removed segment was at the end of the last // chunk. @@ -16341,131 +16367,6 @@ #endif /* UPB_MESSAGE_UNKNOWN_FIELDS_H_ */ -#ifndef UPB_MESSAGE_COMPARE_H_ -#define UPB_MESSAGE_COMPARE_H_ - -#include <stddef.h> - - -// Must be last. - -enum { - // If set, upb_Message_IsEqual() will attempt to compare unknown fields. - // By its very nature this comparison is inexact. - kUpb_CompareOption_IncludeUnknownFields = (1 << 0) -}; - -#ifdef __cplusplus -extern "C" { -#endif - -// Returns true if no known fields or extensions are set in the message. -UPB_API bool upb_Message_IsEmpty(const upb_Message* msg, - const upb_MiniTable* m); - -UPB_API bool upb_Message_IsEqual(const upb_Message* msg1, - const upb_Message* msg2, - const upb_MiniTable* m, int options); - -// If |ctype| is a message then |m| must point to its minitable. -UPB_API_INLINE bool upb_MessageValue_IsEqual(upb_MessageValue val1, - upb_MessageValue val2, - upb_CType ctype, - const upb_MiniTable* m, - int options) { - switch (ctype) { - case kUpb_CType_Bool: - return val1.bool_val == val2.bool_val; - - case kUpb_CType_Float: - case kUpb_CType_Int32: - case kUpb_CType_UInt32: - case kUpb_CType_Enum: - return val1.int32_val == val2.int32_val; - - case kUpb_CType_Double: - case kUpb_CType_Int64: - case kUpb_CType_UInt64: - return val1.int64_val == val2.int64_val; - - case kUpb_CType_String: - case kUpb_CType_Bytes: - return upb_StringView_IsEqual(val1.str_val, val2.str_val); - - case kUpb_CType_Message: - return upb_Message_IsEqual(val1.msg_val, val2.msg_val, m, options); - - default: - UPB_UNREACHABLE(); - return false; - } -} - -#ifdef __cplusplus -} /* extern "C" */ -#endif - - -#endif // UPB_MESSAGE_COMPARE_H_ - -#ifndef UPB_MESSAGE_INTERNAL_COMPARE_UNKNOWN_H_ -#define UPB_MESSAGE_INTERNAL_COMPARE_UNKNOWN_H_ - -#include <stddef.h> - -// Must be last. - -#ifdef __cplusplus -extern "C" { -#endif - -// Returns true if unknown fields from the two messages are equal when sorted -// and varints are made canonical. -// -// This function is discouraged, as the comparison is inherently lossy without -// schema data: -// -// 1. We don't know whether delimited fields are sub-messages. Unknown -// sub-messages will therefore not have their fields sorted and varints -// canonicalized. -// 2. We don't know about oneof/non-repeated fields, which should semantically -// discard every value except the last. - -typedef enum { - kUpb_UnknownCompareResult_Equal = 0, - kUpb_UnknownCompareResult_NotEqual = 1, - kUpb_UnknownCompareResult_OutOfMemory = 2, - kUpb_UnknownCompareResult_MaxDepthExceeded = 3, -} upb_UnknownCompareResult; - -upb_UnknownCompareResult UPB_PRIVATE(_upb_Message_UnknownFieldsAreEqual)( - const upb_Message* msg1, const upb_Message* msg2, int max_depth); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - - -#endif /* UPB_MESSAGE_INTERNAL_COMPARE_UNKNOWN_H_ */ - -#ifndef GOOGLE_UPB_UPB_MESSAGE_INTERNAL_ITERATOR_H__ -#define GOOGLE_UPB_UPB_MESSAGE_INTERNAL_ITERATOR_H__ - -#include <stddef.h> -#include <stdint.h> - - -// Must be last. - -#define kUpb_BaseField_Begin ((size_t)-1) -bool UPB_PRIVATE(_upb_Message_NextBaseField)(const upb_Message* msg, - const upb_MiniTable* m, - const upb_MiniTableField** out_f, - upb_MessageValue* out_v, - uintptr_t* iter); - -#endif // GOOGLE_UPB_UPB_MESSAGE_INTERNAL_ITERATOR_H__ - #ifndef UPB_WIRE_EPS_COPY_INPUT_STREAM_H_ #define UPB_WIRE_EPS_COPY_INPUT_STREAM_H_ @@ -17251,6 +17152,131 @@ #endif // UPB_WIRE_READER_H_ +#ifndef UPB_MESSAGE_COMPARE_H_ +#define UPB_MESSAGE_COMPARE_H_ + +#include <stddef.h> + + +// Must be last. + +enum { + // If set, upb_Message_IsEqual() will attempt to compare unknown fields. + // By its very nature this comparison is inexact. + kUpb_CompareOption_IncludeUnknownFields = (1 << 0) +}; + +#ifdef __cplusplus +extern "C" { +#endif + +// Returns true if no known fields or extensions are set in the message. +UPB_API bool upb_Message_IsEmpty(const upb_Message* msg, + const upb_MiniTable* m); + +UPB_API bool upb_Message_IsEqual(const upb_Message* msg1, + const upb_Message* msg2, + const upb_MiniTable* m, int options); + +// If |ctype| is a message then |m| must point to its minitable. +UPB_API_INLINE bool upb_MessageValue_IsEqual(upb_MessageValue val1, + upb_MessageValue val2, + upb_CType ctype, + const upb_MiniTable* m, + int options) { + switch (ctype) { + case kUpb_CType_Bool: + return val1.bool_val == val2.bool_val; + + case kUpb_CType_Float: + case kUpb_CType_Int32: + case kUpb_CType_UInt32: + case kUpb_CType_Enum: + return val1.int32_val == val2.int32_val; + + case kUpb_CType_Double: + case kUpb_CType_Int64: + case kUpb_CType_UInt64: + return val1.int64_val == val2.int64_val; + + case kUpb_CType_String: + case kUpb_CType_Bytes: + return upb_StringView_IsEqual(val1.str_val, val2.str_val); + + case kUpb_CType_Message: + return upb_Message_IsEqual(val1.msg_val, val2.msg_val, m, options); + + default: + UPB_UNREACHABLE(); + return false; + } +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif + + +#endif // UPB_MESSAGE_COMPARE_H_ + +#ifndef UPB_MESSAGE_INTERNAL_COMPARE_UNKNOWN_H_ +#define UPB_MESSAGE_INTERNAL_COMPARE_UNKNOWN_H_ + +#include <stddef.h> + +// Must be last. + +#ifdef __cplusplus +extern "C" { +#endif + +// Returns true if unknown fields from the two messages are equal when sorted +// and varints are made canonical. +// +// This function is discouraged, as the comparison is inherently lossy without +// schema data: +// +// 1. We don't know whether delimited fields are sub-messages. Unknown +// sub-messages will therefore not have their fields sorted and varints +// canonicalized. +// 2. We don't know about oneof/non-repeated fields, which should semantically +// discard every value except the last. + +typedef enum { + kUpb_UnknownCompareResult_Equal = 0, + kUpb_UnknownCompareResult_NotEqual = 1, + kUpb_UnknownCompareResult_OutOfMemory = 2, + kUpb_UnknownCompareResult_MaxDepthExceeded = 3, +} upb_UnknownCompareResult; + +upb_UnknownCompareResult UPB_PRIVATE(_upb_Message_UnknownFieldsAreEqual)( + const upb_Message* msg1, const upb_Message* msg2, int max_depth); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + + +#endif /* UPB_MESSAGE_INTERNAL_COMPARE_UNKNOWN_H_ */ + +#ifndef GOOGLE_UPB_UPB_MESSAGE_INTERNAL_ITERATOR_H__ +#define GOOGLE_UPB_UPB_MESSAGE_INTERNAL_ITERATOR_H__ + +#include <stddef.h> +#include <stdint.h> + + +// Must be last. + +#define kUpb_BaseField_Begin ((size_t)-1) +bool UPB_PRIVATE(_upb_Message_NextBaseField)(const upb_Message* msg, + const upb_MiniTable* m, + const upb_MiniTableField** out_f, + upb_MessageValue* out_v, + uintptr_t* iter); + +#endif // GOOGLE_UPB_UPB_MESSAGE_INTERNAL_ITERATOR_H__ + #ifndef UPB_MESSAGE_COPY_H_ #define UPB_MESSAGE_COPY_H_
diff --git a/src/file_lists.cmake b/src/file_lists.cmake index 01b0df2..d6a6947 100644 --- a/src/file_lists.cmake +++ b/src/file_lists.cmake
@@ -1339,6 +1339,7 @@ ${protobuf_SOURCE_DIR}/upb/message/map_test.cc ${protobuf_SOURCE_DIR}/upb/message/merge_test.cc ${protobuf_SOURCE_DIR}/upb/message/test.cc + ${protobuf_SOURCE_DIR}/upb/message/unknown_fields_test.cc ${protobuf_SOURCE_DIR}/upb/message/utf8_test.cc ${protobuf_SOURCE_DIR}/upb/mini_descriptor/internal/encode_test.cc ${protobuf_SOURCE_DIR}/upb/mini_table/compat_test.cc