rename upb_Message_WhichOneof to upb_Message_WhichOneofByDef

and introduce upb_Message_WhichOneof that returns a minitable field

PiperOrigin-RevId: 631583174
Hong Shin 2024-05-07 16:19:18 -07:00 committed by Copybara-Service
parent fefec68753
commit 22a9ebe0c4
6 changed files with 23 additions and 12 deletions

View File

@ -1039,9 +1039,9 @@ static PyObject* PyUpb_Message_HasField(PyObject* _self, PyObject* arg) {
if (PyUpb_Message_IsStub(self)) Py_RETURN_FALSE;
return PyBool_FromLong(field ? upb_Message_HasFieldByDef(self->ptr.msg, field)
: upb_Message_WhichOneof(self->ptr.msg, oneof) !=
NULL);
return PyBool_FromLong(
field ? upb_Message_HasFieldByDef(self->ptr.msg, field)
: upb_Message_WhichOneofByDef(self->ptr.msg, oneof) != NULL);
}
static PyObject* PyUpb_Message_Contains(PyObject* _self, PyObject* arg) {
@ -1421,7 +1421,7 @@ static PyObject* PyUpb_Message_ClearField(PyObject* _self, PyObject* arg) {
return NULL;
}
if (o) f = upb_Message_WhichOneof(self->ptr.msg, o);
if (o) f = upb_Message_WhichOneofByDef(self->ptr.msg, o);
if (f) PyUpb_Message_DoClearField(_self, f);
Py_RETURN_NONE;
}
@ -1616,7 +1616,7 @@ static PyObject* PyUpb_Message_WhichOneof(PyObject* _self, PyObject* name) {
}
upb_Message* msg = PyUpb_Message_GetIfReified(_self);
if (!msg) Py_RETURN_NONE;
const upb_FieldDef* f = upb_Message_WhichOneof(msg, o);
const upb_FieldDef* f = upb_Message_WhichOneofByDef(msg, o);
if (!f) Py_RETURN_NONE;
return PyUnicode_FromString(upb_FieldDef_Name(f));
}

View File

@ -248,7 +248,7 @@ static int extract_method_call(VALUE method_name, Message* self,
static VALUE Message_oneof_accessor(VALUE _self, const upb_OneofDef* o,
int accessor_type) {
Message* self = ruby_to_Message(_self);
const upb_FieldDef* oneof_field = upb_Message_WhichOneof(self->msg, o);
const upb_FieldDef* oneof_field = upb_Message_WhichOneofByDef(self->msg, o);
switch (accessor_type) {
case METHOD_PRESENCE:

View File

@ -1758,7 +1758,7 @@ void GenerateCMessage(const Descriptor* message, io::Printer* printer) {
" const upb_OneofDef *oneof = upb_MessageDef_FindOneofByName(\n"
" intern->desc->msgdef, \"$name$\");\n"
" const upb_FieldDef *field = \n"
" upb_Message_WhichOneof(intern->msg, oneof);\n"
" upb_Message_WhichOneofByDef(intern->msg, oneof);\n"
" RETURN_STRING(field ? upb_FieldDef_Name(field) : \"\");\n"
"}\n",
"c_name", c_name, "name", oneof->name(), "camel_name",

View File

@ -957,7 +957,7 @@ static void jsondec_field(jsondec* d, upb_Message* msg,
}
if (upb_FieldDef_RealContainingOneof(f) &&
upb_Message_WhichOneof(msg, upb_FieldDef_ContainingOneof(f))) {
upb_Message_WhichOneofByDef(msg, upb_FieldDef_ContainingOneof(f))) {
jsondec_err(d, "More than one field for this oneof.");
}

View File

@ -41,8 +41,8 @@ bool upb_Message_HasFieldByDef(const upb_Message* msg, const upb_FieldDef* f) {
}
}
const upb_FieldDef* upb_Message_WhichOneof(const upb_Message* msg,
const upb_OneofDef* o) {
const upb_FieldDef* upb_Message_WhichOneofByDef(const upb_Message* msg,
const upb_OneofDef* o) {
const upb_FieldDef* f = upb_OneofDef_Field(o, 0);
if (upb_OneofDef_IsSynthetic(o)) {
UPB_ASSERT(upb_OneofDef_FieldCount(o) == 1);
@ -56,6 +56,14 @@ const upb_FieldDef* upb_Message_WhichOneof(const upb_Message* msg,
}
}
const upb_MiniTableField* upb_Message_WhichOneof(const upb_Message* msg,
const upb_OneofDef* o) {
const upb_FieldDef* f = upb_OneofDef_Field(o, 0);
// Question for Haberman: should we do anything if synthetic?
// if (upb_OneofDef_IsSynthetic(o)) {...}
return upb_FieldDef_MiniTable(f);
}
upb_MessageValue upb_Message_GetFieldByDef(const upb_Message* msg,
const upb_FieldDef* f) {
upb_MessageValue default_val = upb_FieldDef_Default(f);

View File

@ -30,8 +30,11 @@ UPB_API upb_MutableMessageValue upb_Message_Mutable(upb_Message* msg,
upb_Arena* a);
// Returns the field that is set in the oneof, or NULL if none are set.
UPB_API const upb_FieldDef* upb_Message_WhichOneof(const upb_Message* msg,
const upb_OneofDef* o);
UPB_API const upb_FieldDef* upb_Message_WhichOneofByDef(const upb_Message* msg,
const upb_OneofDef* o);
UPB_API const upb_MiniTableField* upb_Message_WhichOneOf(const upb_Message* msg,
const upb_OneofDef* o);
// Clear all data and unknown fields.
void upb_Message_ClearByDef(upb_Message* msg, const upb_MessageDef* m);