Switch over to using object instances for all PythonData objects.



git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@162504 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Interpreter/PythonDataObjects.cpp b/source/Interpreter/PythonDataObjects.cpp
index ba4ba23..ba3879e 100644
--- a/source/Interpreter/PythonDataObjects.cpp
+++ b/source/Interpreter/PythonDataObjects.cpp
@@ -26,45 +26,63 @@
 using namespace lldb_private;
 using namespace lldb;
 
-PythonDataObject::PythonDataObject (PyObject* object) : m_object(object)
+PythonDataObject::PythonDataObject (PyObject* object) :
+    m_object(object)
 {
 }
 
-PythonDataString*
+PythonDataObject::PythonDataObject () :
+    m_object()
+{
+}
+
+PythonDataObject::~PythonDataObject ()
+{
+}
+
+PythonDataString
 PythonDataObject::GetStringObject ()
 {
-    return new PythonDataString(GetPythonObject());
+    return PythonDataString(GetPythonObject());
 }
     
-PythonDataInteger*
+PythonDataInteger
 PythonDataObject::GetIntegerObject ()
 {
-    return new PythonDataInteger(GetPythonObject());
+    return PythonDataInteger(GetPythonObject());
 }
 
-PythonDataArray*
+PythonDataArray
 PythonDataObject::GetArrayObject()
 {
-    return new PythonDataArray(GetPythonObject());
+    return PythonDataArray(GetPythonObject());
 }
 
-PythonDataDictionary*
+PythonDataDictionary
 PythonDataObject::GetDictionaryObject()
 {
-    return new PythonDataDictionary(GetPythonObject());
+    return PythonDataDictionary(GetPythonObject());
 }
 
-PythonDataInteger::PythonDataInteger (PyObject* object) : m_object(object)
+PythonDataInteger::PythonDataInteger (bool create_empty) :
+    m_object(create_empty ? PyInt_FromLong(0) : NULL)
 {
-    if (!PyInt_Check(GetPythonObject()))
+}
+
+PythonDataInteger::PythonDataInteger (PyObject* object) :
+    m_object(object)
+{
+    if (object && !PyInt_Check(GetPythonObject()))
         m_object.Reset();
 }
 
-PythonDataInteger::~PythonDataInteger ()
+PythonDataInteger::PythonDataInteger (int64_t value) :
+    m_object(PyInt_FromLong(value))
 {
 }
 
-PythonDataInteger::PythonDataInteger (int64_t value) : m_object(PyInt_FromLong(value))
+
+PythonDataInteger::~PythonDataInteger ()
 {
 }
 
@@ -83,12 +101,20 @@
     m_object.Reset(PyInt_FromLong(value));
 }
 
-PythonDataString::PythonDataString (PyObject* object) : m_object(object)
+PythonDataString::PythonDataString (bool create_empty) :
+    m_object(create_empty ? PyString_FromString("") : NULL)
 {
-    if (!PyString_Check(GetPythonObject()))
-        m_object.Reset();}
+}
 
-PythonDataString::PythonDataString (const char* string) : m_object(PyString_FromString(string))
+PythonDataString::PythonDataString (PyObject* object) :
+    m_object(object)
+{
+    if (object && !PyString_Check(GetPythonObject()))
+        m_object.Reset();
+}
+
+PythonDataString::PythonDataString (const char* string) :
+    m_object(PyString_FromString(string))
 {
 }
 
@@ -110,13 +136,20 @@
     m_object.Reset(PyString_FromString(string));
 }
 
-PythonDataArray::PythonDataArray (uint32_t count) : m_object(PyList_New(count))
+PythonDataArray::PythonDataArray (bool create_empty) :
+    m_object(create_empty ? PyList_New(0) : NULL)
 {
 }
 
-PythonDataArray::PythonDataArray (PyObject* object) : m_object(object)
+PythonDataArray::PythonDataArray (uint32_t count) :
+    m_object(PyList_New(count))
 {
-    if (!PyList_Check(GetPythonObject()))
+}
+
+PythonDataArray::PythonDataArray (PyObject* object) :
+    m_object(object)
+{
+    if (object && !PyList_Check(GetPythonObject()))
         m_object.Reset();
 }
 
@@ -132,35 +165,37 @@
     return 0;
 }
 
-PythonDataObject*
+PythonDataObject
 PythonDataArray::GetItemAtIndex (uint32_t index)
 {
     if (m_object)
-        return new PythonDataObject(PyList_GetItem(GetPythonObject(), index));
+        return PythonDataObject(PyList_GetItem(GetPythonObject(), index));
     return NULL;
 }
 
 void
-PythonDataArray::SetItemAtIndex (uint32_t index, PythonDataObject* object)
+PythonDataArray::SetItemAtIndex (uint32_t index, const PythonDataObject & object)
 {
-    if (m_object && object && *object)
-        PyList_SetItem(GetPythonObject(), index, object->GetPythonObject());
+    if (m_object && object)
+        PyList_SetItem(GetPythonObject(), index, object.GetPythonObject());
 }
 
 void
-PythonDataArray::AppendItem (PythonDataObject* object)
+PythonDataArray::AppendItem (const PythonDataObject &object)
 {
-    if (m_object && object && *object)
-        PyList_Append(GetPythonObject(), object->GetPythonObject());
+    if (m_object && object)
+        PyList_Append(GetPythonObject(), object.GetPythonObject());
 }
 
-PythonDataDictionary::PythonDataDictionary () : m_object(PyDict_New())
+PythonDataDictionary::PythonDataDictionary (bool create_empty) :
+    m_object(create_empty ? PyDict_New() : NULL)
 {
 }
 
-PythonDataDictionary::PythonDataDictionary (PyObject* object) : m_object(object)
+PythonDataDictionary::PythonDataDictionary (PyObject* object) :
+    m_object(object)
 {
-    if (!PyDict_Check(GetPythonObject()))
+    if (object && !PyDict_Check(GetPythonObject()))
         m_object.Reset();
 }
 
@@ -176,39 +211,52 @@
     return 0;
 }
 
-PythonDataObject*
-PythonDataDictionary::GetItemForKey (PythonDataString* key)
+PythonDataObject
+PythonDataDictionary::GetItemForKey (const char *key)
 {
-    if (m_object && key && *key)
-        return new PythonDataObject(PyDict_GetItem(GetPythonObject(), key->GetPythonObject()));
+    if (key && key[0])
+    {
+        PythonDataString python_key(key);
+        return GetItemForKey(python_key);
+    }
     return NULL;
 }
 
-PythonDataArray*
+
+PythonDataObject
+PythonDataDictionary::GetItemForKey (const PythonDataString &key)
+{
+    if (m_object && key)
+        return PythonDataObject(PyDict_GetItem(GetPythonObject(), key.GetPythonObject()));
+    return PythonDataObject();
+}
+
+PythonDataArray
 PythonDataDictionary::GetKeys ()
 {
     if (m_object)
-        return new PythonDataArray(PyDict_Keys(GetPythonObject()));
-    return NULL;
+        return PythonDataArray(PyDict_Keys(GetPythonObject()));
+    return PythonDataArray();
 }
 
-PythonDataString*
+PythonDataString
 PythonDataDictionary::GetKeyAtPosition (uint32_t pos)
 {
     PyObject *key, *value;
     Py_ssize_t pos_iter = 0;
     
-    if (!m_object)
-        return NULL;
-    
-    while (PyDict_Next(GetPythonObject(), &pos_iter, &key, &value)) {
-        if (pos-- == 0)
-            return new PythonDataString(key);
+    if (m_object)
+    {
+        while (PyDict_Next(GetPythonObject(), &pos_iter, &key, &value))
+        {
+            if (pos-- == 0)
+                return PythonDataString(key);
+        }
     }
-    return NULL;
+    return PythonDataString();
 }
 
-PythonDataObject*
+PythonDataObject
 PythonDataDictionary::GetValueAtPosition (uint32_t pos)
 {
     PyObject *key, *value;
@@ -219,16 +267,16 @@
     
     while (PyDict_Next(GetPythonObject(), &pos_iter, &key, &value)) {
         if (pos-- == 0)
-            return new PythonDataObject(value);
+            return PythonDataObject(value);
     }
-    return NULL;
+    return PythonDataObject();
 }
 
 void
-PythonDataDictionary::SetItemForKey (PythonDataString* key, PythonDataObject* value)
+PythonDataDictionary::SetItemForKey (const PythonDataString &key, const PythonDataObject &value)
 {
-    if (m_object && key && value && *key && *value)
-        PyDict_SetItem(GetPythonObject(), key->GetPythonObject(), value->GetPythonObject());
+    if (m_object && key && value)
+        PyDict_SetItem(GetPythonObject(), key.GetPythonObject(), value.GetPythonObject());
 }
 
 #endif