rename upb_Message_WhichOneof to upb_Message_WhichOneofByDef
and introduce upb_Message_WhichOneof that returns a minitable field PiperOrigin-RevId: 631583174
parent
fefec68753
commit
22a9ebe0c4
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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.");
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue