Skip to content
This repository was archived by the owner on Dec 9, 2025. It is now read-only.

Commit e09d6fc

Browse files
Update mini table API comment
PiperOrigin-RevId: 463868386
1 parent 33313a2 commit e09d6fc

4 files changed

Lines changed: 55 additions & 20 deletions

File tree

upb/mini_table.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ UPB_INLINE const upb_MiniTable* upb_MiniTable_GetSubMessageTable(
4545
return mini_table->subs[field->submsg_index].submsg;
4646
}
4747

48+
// Validates enum value against range defined by enum mini table.
4849
UPB_INLINE bool upb_MiniTable_Enum_CheckValue(const upb_MiniTable_Enum* e,
4950
int32_t val) {
5051
uint32_t uval = (uint32_t)val;

upb/mini_table_accessors.c

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -172,21 +172,6 @@ static const char* decode_tag(const char* ptr, uint32_t* val) {
172172
}
173173
}
174174

175-
typedef enum {
176-
kUpb_FindUnknown_Ok,
177-
kUpb_FindUnknown_NotPresent,
178-
kUpb_FindUnknown_ParseError,
179-
} upb_FindUnknown_Status;
180-
181-
typedef struct {
182-
upb_FindUnknown_Status status;
183-
const char* ptr;
184-
size_t len;
185-
} find_unknown_ret;
186-
187-
static find_unknown_ret UnknownFieldSet_FindField(const upb_Message* msg,
188-
int field_number);
189-
190175
upb_GetExtension_Status upb_MiniTable_GetOrPromoteExtension(
191176
upb_Message* msg, const upb_MiniTable_Extension* ext_table,
192177
int decode_options, upb_Arena* arena,
@@ -199,7 +184,7 @@ upb_GetExtension_Status upb_MiniTable_GetOrPromoteExtension(
199184

200185
// Check unknown fields, if available promote.
201186
int field_number = ext_table->field.number;
202-
find_unknown_ret result = UnknownFieldSet_FindField(msg, field_number);
187+
upb_FindUnknownRet result = upb_MiniTable_FindUnknown(msg, field_number);
203188
if (result.status != kUpb_FindUnknown_Ok) {
204189
UPB_ASSERT(result.status != kUpb_GetExtension_ParseError);
205190
return kUpb_GetExtension_NotPresent;
@@ -258,7 +243,7 @@ upb_GetExtensionAsBytes_Status upb_MiniTable_GetExtensionAsBytes(
258243
return kUpb_GetExtensionAsBytes_Ok;
259244
}
260245
int field_number = ext_table->field.number;
261-
find_unknown_ret result = UnknownFieldSet_FindField(msg, field_number);
246+
upb_FindUnknownRet result = upb_MiniTable_FindUnknown(msg, field_number);
262247
if (result.status != kUpb_FindUnknown_Ok) {
263248
UPB_ASSERT(result.status != kUpb_GetExtension_ParseError);
264249
return kUpb_GetExtensionAsBytes_NotPresent;
@@ -329,10 +314,10 @@ enum {
329314
kUpb_MessageSet_MessageTag = (3 << 3) | kUpb_WireType_Delimited,
330315
};
331316

332-
static find_unknown_ret UnknownFieldSet_FindField(const upb_Message* msg,
333-
int field_number) {
317+
upb_FindUnknownRet upb_MiniTable_FindUnknown(const upb_Message* msg,
318+
uint32_t field_number) {
334319
size_t size;
335-
find_unknown_ret ret;
320+
upb_FindUnknownRet ret;
336321

337322
const char* ptr = upb_Message_GetUnknown(msg, &size);
338323
if (size == 0) {

upb/mini_table_accessors.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,23 @@ upb_GetExtensionAsBytes_Status upb_MiniTable_GetExtensionAsBytes(
262262
int encode_options, upb_Arena* arena, const char** extension_data,
263263
size_t* len);
264264

265+
typedef enum {
266+
kUpb_FindUnknown_Ok,
267+
kUpb_FindUnknown_NotPresent,
268+
kUpb_FindUnknown_ParseError,
269+
} upb_FindUnknown_Status;
270+
271+
typedef struct {
272+
upb_FindUnknown_Status status;
273+
// Start of unknown field data in message arena.
274+
const char* ptr;
275+
// Size of unknown field data.
276+
size_t len;
277+
} upb_FindUnknownRet;
278+
279+
upb_FindUnknownRet upb_MiniTable_FindUnknown(const upb_Message* msg,
280+
uint32_t field_number);
281+
265282
#ifdef __cplusplus
266283
} /* extern "C" */
267284
#endif

upb/mini_table_accessors_test.cc

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,38 @@ TEST(GeneratedCode, GetMutableMessage) {
376376
upb_Arena_Free(arena);
377377
}
378378

379+
TEST(GeneratedCode, FindUnknown) {
380+
upb_Arena* arena = upb_Arena_New();
381+
upb_test_ModelWithExtensions* msg = upb_test_ModelWithExtensions_new(arena);
382+
upb_test_ModelWithExtensions_set_random_int32(msg, 10);
383+
upb_test_ModelWithExtensions_set_random_name(
384+
msg, upb_StringView_FromString("Hello"));
385+
386+
upb_test_ModelExtension1* extension1 = upb_test_ModelExtension1_new(arena);
387+
upb_test_ModelExtension1_set_str(extension1,
388+
upb_StringView_FromString("World"));
389+
390+
upb_test_ModelExtension1_set_model_ext(msg, extension1, arena);
391+
392+
size_t serialized_size;
393+
char* serialized =
394+
upb_test_ModelWithExtensions_serialize(msg, arena, &serialized_size);
395+
396+
upb_test_EmptyMessageWithExtensions* base_msg =
397+
upb_test_EmptyMessageWithExtensions_parse(serialized, serialized_size,
398+
arena);
399+
400+
upb_FindUnknownRet result = upb_MiniTable_FindUnknown(
401+
base_msg, upb_test_ModelExtension1_model_ext_ext.field.number);
402+
EXPECT_EQ(kUpb_FindUnknown_Ok, result.status);
403+
404+
result = upb_MiniTable_FindUnknown(
405+
base_msg, upb_test_ModelExtension2_model_ext_ext.field.number);
406+
EXPECT_EQ(kUpb_FindUnknown_NotPresent, result.status);
407+
408+
upb_Arena_Free(arena);
409+
}
410+
379411
TEST(GeneratedCode, Extensions) {
380412
upb_Arena* arena = upb_Arena_New();
381413
upb_test_ModelWithExtensions* msg = upb_test_ModelWithExtensions_new(arena);

0 commit comments

Comments
 (0)