Index: third_party/protobuf/python/google/protobuf/pyext/repeated_composite_container.cc |
diff --git a/third_party/protobuf/python/google/protobuf/pyext/repeated_composite_container.cc b/third_party/protobuf/python/google/protobuf/pyext/repeated_composite_container.cc |
index b01123b4c0efb821eb9150f67a1fa6ebb8dbb496..4f339e77235413e278e3074bbe0deb347b1291ba 100644 |
--- a/third_party/protobuf/python/google/protobuf/pyext/repeated_composite_container.cc |
+++ b/third_party/protobuf/python/google/protobuf/pyext/repeated_composite_container.cc |
@@ -107,8 +107,7 @@ static int UpdateChildMessages(RepeatedCompositeContainer* self) { |
for (Py_ssize_t i = child_length; i < message_length; ++i) { |
const Message& sub_message = reflection->GetRepeatedMessage( |
*(self->message), self->parent_field_descriptor, i); |
- CMessage* cmsg = cmessage::NewEmptyMessage(self->subclass_init, |
- sub_message.GetDescriptor()); |
+ CMessage* cmsg = cmessage::NewEmptyMessage(self->child_message_class); |
ScopedPyObjectPtr py_cmsg(reinterpret_cast<PyObject*>(cmsg)); |
if (cmsg == NULL) { |
return -1; |
@@ -140,8 +139,7 @@ static PyObject* AddToAttached(RepeatedCompositeContainer* self, |
Message* sub_message = |
message->GetReflection()->AddMessage(message, |
self->parent_field_descriptor); |
- CMessage* cmsg = cmessage::NewEmptyMessage(self->subclass_init, |
- sub_message->GetDescriptor()); |
+ CMessage* cmsg = cmessage::NewEmptyMessage(self->child_message_class); |
if (cmsg == NULL) |
return NULL; |
@@ -168,7 +166,7 @@ static PyObject* AddToReleased(RepeatedCompositeContainer* self, |
// Create a new Message detached from the rest. |
PyObject* py_cmsg = PyEval_CallObjectWithKeywords( |
- self->subclass_init, NULL, kwargs); |
+ self->child_message_class->AsPyObject(), NULL, kwargs); |
if (py_cmsg == NULL) |
return NULL; |
@@ -506,7 +504,7 @@ int SetOwner(RepeatedCompositeContainer* self, |
PyObject *NewContainer( |
CMessage* parent, |
const FieldDescriptor* parent_field_descriptor, |
- PyObject *concrete_class) { |
+ CMessageClass* concrete_class) { |
if (!CheckFieldBelongsToMessage(parent_field_descriptor, parent->message)) { |
return NULL; |
} |
@@ -523,7 +521,7 @@ PyObject *NewContainer( |
self->parent_field_descriptor = parent_field_descriptor; |
self->owner = parent->owner; |
Py_INCREF(concrete_class); |
- self->subclass_init = concrete_class; |
+ self->child_message_class = concrete_class; |
self->child_messages = PyList_New(0); |
return reinterpret_cast<PyObject*>(self); |
@@ -531,7 +529,7 @@ PyObject *NewContainer( |
static void Dealloc(RepeatedCompositeContainer* self) { |
Py_CLEAR(self->child_messages); |
- Py_CLEAR(self->subclass_init); |
+ Py_CLEAR(self->child_message_class); |
// TODO(tibell): Do we need to call delete on these objects to make |
// sure their destructors are called? |
self->owner.reset(); |