zturner added a comment.

Let me know what you think about my responses.  Anything I didn't specifically 
call out I'll fix in the next version of the patch.


================
Comment at: source/Plugins/ScriptInterpreter/Python/PythonDataObjects.h:73-79
@@ -73,2 +72,9 @@
 
-    class PythonObject
+enum class PyRefType
+{
+    Borrowed, // We are not given ownership of the incoming PyObject.
+              // We cannot safely hold it without calling Py_INCREF.
+    Owned     // We have ownership of the incoming PyObject.  We should
+              // not call Py_INCREF.
+};
+
----------------
clayborg wrote:
> clayborg wrote:
> > Might be nicer to move into the PyRef class and just name these "Type" and 
> > "InitialValue"?
> It seems like we don't need an enum for this, this can just be a bool named 
> "dont_incref" or some other name?
In theory.  I used an enum because if you read the Python documentation, they 
explicitly use the terminology of Borrowed and New references.  I don't want 
people to have to think about how to translate the Python documentation into a 
boolean value.  This way the code speaks the same language as the 
documentation, and it's hard to make a mistake.

================
Comment at: source/Plugins/ScriptInterpreter/Python/PythonDataObjects.h:73-85
@@ -73,2 +72,15 @@
 
-    class PythonObject
+enum class PyRefType
+{
+    Borrowed, // We are not given ownership of the incoming PyObject.
+              // We cannot safely hold it without calling Py_INCREF.
+    Owned     // We have ownership of the incoming PyObject.  We should
+              // not call Py_INCREF.
+};
+
+enum class PyInitialValue
+{
+    Invalid,
+    Empty
+};
+
----------------
zturner wrote:
> clayborg wrote:
> > clayborg wrote:
> > > Might be nicer to move into the PyRef class and just name these "Type" 
> > > and "InitialValue"?
> > It seems like we don't need an enum for this, this can just be a bool named 
> > "dont_incref" or some other name?
> In theory.  I used an enum because if you read the Python documentation, they 
> explicitly use the terminology of Borrowed and New references.  I don't want 
> people to have to think about how to translate the Python documentation into 
> a boolean value.  This way the code speaks the same language as the 
> documentation, and it's hard to make a mistake.
Possible, but it only really applies for Dictionary and List, or at least the 
way we use it it does.

================
Comment at: source/Plugins/ScriptInterpreter/Python/PythonDataObjects.h:87
@@ -75,1 +86,3 @@
+
+class PyRef
     {
----------------
clayborg wrote:
> Why did we need to rename PythonObject to PyRef? It can be done, but seems 
> different from the the rest of the classes here. Everything else is spelled 
> out, I would prefer this stay as PythonObject.
Less to type for one thing, and I thought it made it clearer that it's a very 
thin wrapper that can be trivially copied without any overhead.

================
Comment at: source/Plugins/ScriptInterpreter/Python/PythonDataObjects.h:192
@@ +191,3 @@
+
+        operator PyObject *() const { return m_py_obj; }
+
----------------
clayborg wrote:
> I really don't like these implicit conversions as they make for bad things 
> that can happen. We already see issues with Reset as you mention above. I 
> would rather just have a "PyObject *get() const;" method that we use to 
> explicitly do this. It gets event worse when you already have an implicit 
> bool operator...
Fair enough, I can fix that.  Do you want me to remove the implicit bool 
conversion operator too?  The `bool` conversion operator is weird, because it 
only checks for null, and not `Py_None`, so it's different than calling 
`IsNULLOrNone`.  In practice I think it would be fine to call `IsNULLOrNone`, 
and at one point while this CL is in progress I had changed the client code to 
do that, but it ended up being really ugly so I put the bool conversion back.

In any case, should I just leave the bool operator and remove the `PyObject` 
operator?


http://reviews.llvm.org/D13617



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to