| Index: third_party/protobuf/python/google/protobuf/pyext/map_container.cc
 | 
| diff --git a/third_party/protobuf/python/google/protobuf/pyext/map_container.cc b/third_party/protobuf/python/google/protobuf/pyext/map_container.cc
 | 
| index 088ddf93536ac75e76d78c0412bb2344ac75cdea..e022406d11f0400a12b01f1072773c4cf3813f03 100644
 | 
| --- a/third_party/protobuf/python/google/protobuf/pyext/map_container.cc
 | 
| +++ b/third_party/protobuf/python/google/protobuf/pyext/map_container.cc
 | 
| @@ -39,12 +39,11 @@
 | 
|  
 | 
|  #include <google/protobuf/stubs/logging.h>
 | 
|  #include <google/protobuf/stubs/common.h>
 | 
| +#include <google/protobuf/stubs/scoped_ptr.h>
 | 
|  #include <google/protobuf/map_field.h>
 | 
|  #include <google/protobuf/map.h>
 | 
|  #include <google/protobuf/message.h>
 | 
| -#include <google/protobuf/pyext/message_factory.h>
 | 
|  #include <google/protobuf/pyext/message.h>
 | 
| -#include <google/protobuf/pyext/repeated_composite_container.h>
 | 
|  #include <google/protobuf/pyext/scoped_pyobject_ptr.h>
 | 
|  
 | 
|  #if PY_MAJOR_VERSION >= 3
 | 
| @@ -330,15 +329,6 @@ PyObject* Clear(PyObject* _self) {
 | 
|    Py_RETURN_NONE;
 | 
|  }
 | 
|  
 | 
| -PyObject* GetEntryClass(PyObject* _self) {
 | 
| -  MapContainer* self = GetMap(_self);
 | 
| -  CMessageClass* message_class = message_factory::GetMessageClass(
 | 
| -      cmessage::GetFactoryForMessage(self->parent),
 | 
| -      self->parent_field_descriptor->message_type());
 | 
| -  Py_XINCREF(message_class);
 | 
| -  return reinterpret_cast<PyObject*>(message_class);
 | 
| -}
 | 
| -
 | 
|  PyObject* MapReflectionFriend::Contains(PyObject* _self, PyObject* key) {
 | 
|    MapContainer* self = GetMap(_self);
 | 
|  
 | 
| @@ -359,10 +349,9 @@ PyObject* MapReflectionFriend::Contains(PyObject* _self, PyObject* key) {
 | 
|  }
 | 
|  
 | 
|  // Initializes the underlying Message object of "to" so it becomes a new parent
 | 
| -// map container, and copies all the values from "from" to it. A child map
 | 
| +// repeated scalar, and copies all the values from "from" to it. A child scalar
 | 
|  // container can be released by passing it as both from and to (e.g. making it
 | 
|  // the recipient of the new parent message and copying the values from itself).
 | 
| -// In fact, this is the only supported use at the moment.
 | 
|  static int InitializeAndCopyToParentContainer(MapContainer* from,
 | 
|                                                MapContainer* to) {
 | 
|    // For now we require from == to, re-evaluate if we want to support deep copy
 | 
| @@ -374,7 +363,7 @@ static int InitializeAndCopyToParentContainer(MapContainer* from,
 | 
|      // A somewhat roundabout way of copying just one field from old_message to
 | 
|      // new_message.  This is the best we can do with what Reflection gives us.
 | 
|      Message* mutable_old = from->GetMutableMessage();
 | 
| -    std::vector<const FieldDescriptor*> fields;
 | 
| +    vector<const FieldDescriptor*> fields;
 | 
|      fields.push_back(from->parent_field_descriptor);
 | 
|  
 | 
|      // Move the map field into the new message.
 | 
| @@ -411,7 +400,12 @@ PyObject *NewScalarMapContainer(
 | 
|      return NULL;
 | 
|    }
 | 
|  
 | 
| -  ScopedPyObjectPtr obj(PyType_GenericAlloc(ScalarMapContainer_Type, 0));
 | 
| +#if PY_MAJOR_VERSION >= 3
 | 
| +  ScopedPyObjectPtr obj(PyType_GenericAlloc(
 | 
| +        reinterpret_cast<PyTypeObject *>(ScalarMapContainer_Type), 0));
 | 
| +#else
 | 
| +  ScopedPyObjectPtr obj(PyType_GenericAlloc(&ScalarMapContainer_Type, 0));
 | 
| +#endif
 | 
|    if (obj.get() == NULL) {
 | 
|      return PyErr_Format(PyExc_RuntimeError,
 | 
|                          "Could not allocate new container.");
 | 
| @@ -533,8 +527,6 @@ static PyMethodDef ScalarMapMethods[] = {
 | 
|      "Removes all elements from the map." },
 | 
|    { "get", ScalarMapGet, METH_VARARGS,
 | 
|      "Gets the value for the given key if present, or otherwise a default" },
 | 
| -  { "GetEntryClass", (PyCFunction)GetEntryClass, METH_NOARGS,
 | 
| -    "Return the class used to build Entries of (key, value) pairs." },
 | 
|    /*
 | 
|    { "__deepcopy__", (PyCFunction)DeepCopy, METH_VARARGS,
 | 
|      "Makes a deep copy of the class." },
 | 
| @@ -544,7 +536,6 @@ static PyMethodDef ScalarMapMethods[] = {
 | 
|    {NULL, NULL},
 | 
|  };
 | 
|  
 | 
| -PyTypeObject *ScalarMapContainer_Type;
 | 
|  #if PY_MAJOR_VERSION >= 3
 | 
|    static PyType_Slot ScalarMapContainer_Type_slots[] = {
 | 
|        {Py_tp_dealloc, (void *)ScalarMapDealloc},
 | 
| @@ -563,6 +554,7 @@ PyTypeObject *ScalarMapContainer_Type;
 | 
|        Py_TPFLAGS_DEFAULT,
 | 
|        ScalarMapContainer_Type_slots
 | 
|    };
 | 
| +  PyObject *ScalarMapContainer_Type;
 | 
|  #else
 | 
|    static PyMappingMethods ScalarMapMappingMethods = {
 | 
|      MapReflectionFriend::Length,             // mp_length
 | 
| @@ -570,7 +562,7 @@ PyTypeObject *ScalarMapContainer_Type;
 | 
|      MapReflectionFriend::ScalarMapSetItem,   // mp_ass_subscript
 | 
|    };
 | 
|  
 | 
| -  PyTypeObject _ScalarMapContainer_Type = {
 | 
| +  PyTypeObject ScalarMapContainer_Type = {
 | 
|      PyVarObject_HEAD_INIT(&PyType_Type, 0)
 | 
|      FULL_MODULE_NAME ".ScalarMapContainer",  //  tp_name
 | 
|      sizeof(MapContainer),                //  tp_basicsize
 | 
| @@ -651,7 +643,12 @@ PyObject* NewMessageMapContainer(
 | 
|      return NULL;
 | 
|    }
 | 
|  
 | 
| -  PyObject* obj = PyType_GenericAlloc(MessageMapContainer_Type, 0);
 | 
| +#if PY_MAJOR_VERSION >= 3
 | 
| +  PyObject* obj = PyType_GenericAlloc(
 | 
| +        reinterpret_cast<PyTypeObject *>(MessageMapContainer_Type), 0);
 | 
| +#else
 | 
| +  PyObject* obj = PyType_GenericAlloc(&MessageMapContainer_Type, 0);
 | 
| +#endif
 | 
|    if (obj == NULL) {
 | 
|      return PyErr_Format(PyExc_RuntimeError,
 | 
|                          "Could not allocate new container.");
 | 
| @@ -783,8 +780,6 @@ static PyMethodDef MessageMapMethods[] = {
 | 
|      "Gets the value for the given key if present, or otherwise a default" },
 | 
|    { "get_or_create", MapReflectionFriend::MessageMapGetItem, METH_O,
 | 
|      "Alias for getitem, useful to make explicit that the map is mutated." },
 | 
| -  { "GetEntryClass", (PyCFunction)GetEntryClass, METH_NOARGS,
 | 
| -    "Return the class used to build Entries of (key, value) pairs." },
 | 
|    /*
 | 
|    { "__deepcopy__", (PyCFunction)DeepCopy, METH_VARARGS,
 | 
|      "Makes a deep copy of the class." },
 | 
| @@ -794,7 +789,6 @@ static PyMethodDef MessageMapMethods[] = {
 | 
|    {NULL, NULL},
 | 
|  };
 | 
|  
 | 
| -PyTypeObject *MessageMapContainer_Type;
 | 
|  #if PY_MAJOR_VERSION >= 3
 | 
|    static PyType_Slot MessageMapContainer_Type_slots[] = {
 | 
|        {Py_tp_dealloc, (void *)MessageMapDealloc},
 | 
| @@ -813,6 +807,8 @@ PyTypeObject *MessageMapContainer_Type;
 | 
|        Py_TPFLAGS_DEFAULT,
 | 
|        MessageMapContainer_Type_slots
 | 
|    };
 | 
| +
 | 
| +  PyObject *MessageMapContainer_Type;
 | 
|  #else
 | 
|    static PyMappingMethods MessageMapMappingMethods = {
 | 
|      MapReflectionFriend::Length,              // mp_length
 | 
| @@ -820,7 +816,7 @@ PyTypeObject *MessageMapContainer_Type;
 | 
|      MapReflectionFriend::MessageMapSetItem,   // mp_ass_subscript
 | 
|    };
 | 
|  
 | 
| -  PyTypeObject _MessageMapContainer_Type = {
 | 
| +  PyTypeObject MessageMapContainer_Type = {
 | 
|      PyVarObject_HEAD_INIT(&PyType_Type, 0)
 | 
|      FULL_MODULE_NAME ".MessageMapContainer",  //  tp_name
 | 
|      sizeof(MessageMapContainer),         //  tp_basicsize
 | 
| @@ -969,63 +965,6 @@ PyTypeObject MapIterator_Type = {
 | 
|    0,                                   //  tp_init
 | 
|  };
 | 
|  
 | 
| -bool InitMapContainers() {
 | 
| -  // ScalarMapContainer_Type derives from our MutableMapping type.
 | 
| -  ScopedPyObjectPtr containers(PyImport_ImportModule(
 | 
| -      "google.protobuf.internal.containers"));
 | 
| -  if (containers == NULL) {
 | 
| -    return false;
 | 
| -  }
 | 
| -
 | 
| -  ScopedPyObjectPtr mutable_mapping(
 | 
| -      PyObject_GetAttrString(containers.get(), "MutableMapping"));
 | 
| -  if (mutable_mapping == NULL) {
 | 
| -    return false;
 | 
| -  }
 | 
| -
 | 
| -  if (!PyObject_TypeCheck(mutable_mapping.get(), &PyType_Type)) {
 | 
| -    return false;
 | 
| -  }
 | 
| -
 | 
| -  Py_INCREF(mutable_mapping.get());
 | 
| -#if PY_MAJOR_VERSION >= 3
 | 
| -  PyObject* bases = PyTuple_New(1);
 | 
| -  PyTuple_SET_ITEM(bases, 0, mutable_mapping.get());
 | 
| -
 | 
| -  ScalarMapContainer_Type = reinterpret_cast<PyTypeObject*>(
 | 
| -      PyType_FromSpecWithBases(&ScalarMapContainer_Type_spec, bases));
 | 
| -#else
 | 
| -  _ScalarMapContainer_Type.tp_base =
 | 
| -      reinterpret_cast<PyTypeObject*>(mutable_mapping.get());
 | 
| -
 | 
| -  if (PyType_Ready(&_ScalarMapContainer_Type) < 0) {
 | 
| -    return false;
 | 
| -  }
 | 
| -
 | 
| -  ScalarMapContainer_Type = &_ScalarMapContainer_Type;
 | 
| -#endif
 | 
| -
 | 
| -  if (PyType_Ready(&MapIterator_Type) < 0) {
 | 
| -    return false;
 | 
| -  }
 | 
| -
 | 
| -#if PY_MAJOR_VERSION >= 3
 | 
| -  MessageMapContainer_Type = reinterpret_cast<PyTypeObject*>(
 | 
| -      PyType_FromSpecWithBases(&MessageMapContainer_Type_spec, bases));
 | 
| -#else
 | 
| -  Py_INCREF(mutable_mapping.get());
 | 
| -  _MessageMapContainer_Type.tp_base =
 | 
| -      reinterpret_cast<PyTypeObject*>(mutable_mapping.get());
 | 
| -
 | 
| -  if (PyType_Ready(&_MessageMapContainer_Type) < 0) {
 | 
| -    return false;
 | 
| -  }
 | 
| -
 | 
| -  MessageMapContainer_Type = &_MessageMapContainer_Type;
 | 
| -#endif
 | 
| -  return true;
 | 
| -}
 | 
| -
 | 
|  }  // namespace python
 | 
|  }  // namespace protobuf
 | 
|  }  // namespace google
 | 
| 
 |