summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2001-11-04 05:57:16 (GMT)
committerTim Peters <tim.peters@gmail.com>2001-11-04 05:57:16 (GMT)
commitc99213f99369020c06bb75721fd41e2681445834 (patch)
tree6ef86bf797535fe3f8cb8b1301c728b3f00850f3 /Objects
parentebf5427bfacae1c0bc497410626cbb3e995dc214 (diff)
downloadcpython-c99213f99369020c06bb75721fd41e2681445834.zip
cpython-c99213f99369020c06bb75721fd41e2681445834.tar.gz
cpython-c99213f99369020c06bb75721fd41e2681445834.tar.bz2
No code change -- just trying to document the return conditions for all
the internal comparison routines.
Diffstat (limited to 'Objects')
-rw-r--r--Objects/object.c60
1 files changed, 43 insertions, 17 deletions
diff --git a/Objects/object.c b/Objects/object.c
index 5c2dcf5..7c6819d 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -396,9 +396,9 @@ try_rich_compare(PyObject *v, PyObject *w, int op)
/* Try a genuine rich comparison, returning an int. Return:
-1 for exception (including the case where try_rich_compare() returns an
object that's not a Boolean);
- 0 if the outcome is false;
- 1 if the outcome is true;
- 2 if this particular rich comparison is not implemented or undefined.
+ 0 if the outcome is false;
+ 1 if the outcome is true;
+ 2 if this particular rich comparison is not implemented or undefined.
*/
static int
try_rich_compare_bool(PyObject *v, PyObject *w, int op)
@@ -422,10 +422,10 @@ try_rich_compare_bool(PyObject *v, PyObject *w, int op)
/* Try rich comparisons to determine a 3-way comparison. Return:
-2 for an exception;
- -1 if v < w;
- 0 if v == w;
- 1 if v > w;
- 2 if this particular rich comparison is not implemented or undefined.
+ -1 if v < w;
+ 0 if v == w;
+ 1 if v > w;
+ 2 if this particular rich comparison is not implemented or undefined.
*/
static int
try_rich_to_3way_compare(PyObject *v, PyObject *w)
@@ -455,10 +455,10 @@ try_rich_to_3way_compare(PyObject *v, PyObject *w)
/* Try a 3-way comparison, returning an int. Return:
-2 for an exception;
- -1 if v < w;
- 0 if v == w;
- 1 if v > w;
- 2 if this particular 3-way comparison is not implemented or undefined.
+ -1 if v < w;
+ 0 if v == w;
+ 1 if v > w;
+ 2 if this particular 3-way comparison is not implemented or undefined.
*/
static int
try_3way_compare(PyObject *v, PyObject *w)
@@ -523,9 +523,9 @@ try_3way_compare(PyObject *v, PyObject *w)
/* Final fallback 3-way comparison, returning an int. Return:
-2 if an error occurred;
- -1 if v < w;
- 0 if v == w;
- 1 if v > w.
+ -1 if v < w;
+ 0 if v == w;
+ 1 if v > w.
*/
static int
default_3way_compare(PyObject *v, PyObject *w)
@@ -590,9 +590,9 @@ default_3way_compare(PyObject *v, PyObject *w)
/* Do a 3-way comparison, by hook or by crook. Return:
-2 for an exception;
- -1 if v < w;
+ -1 if v < w;
0 if v == w;
- 1 if v > w;
+ 1 if v > w;
If the object implements a tp_compare function, it returns
whatever this function returns (whether with an exception or not).
*/
@@ -723,6 +723,13 @@ delete_token(PyObject *token)
Py_DECREF(token);
}
+/* Compare v to w. Return
+ -1 if v < w or exception (PyErr_Occurred() true in latter case).
+ 0 if v == w.
+ 1 if v > w.
+ XXX The docs (C API manual) say the return value is undefined in case
+ XXX of error.
+*/
int
PyObject_Compare(PyObject *v, PyObject *w)
{
@@ -771,6 +778,7 @@ PyObject_Compare(PyObject *v, PyObject *w)
return result < 0 ? -1 : result;
}
+/* Return (new reference to) Py_True or Py_False. */
static PyObject *
convert_3way_to_object(int op, int c)
{
@@ -788,7 +796,12 @@ convert_3way_to_object(int op, int c)
return result;
}
-
+/* We want a rich comparison but don't have one. Try a 3-way cmp instead.
+ Return
+ NULL if error
+ Py_True if v op w
+ Py_False if not (v op w)
+*/
static PyObject *
try_3way_to_rich_compare(PyObject *v, PyObject *w, int op)
{
@@ -802,6 +815,12 @@ try_3way_to_rich_compare(PyObject *v, PyObject *w, int op)
return convert_3way_to_object(op, c);
}
+/* Do rich comparison on v and w. Return
+ NULL if error
+ Else a new reference to an object other than Py_NotImplemented, usually(?):
+ Py_True if v op w
+ Py_False if not (v op w)
+*/
static PyObject *
do_richcmp(PyObject *v, PyObject *w, int op)
{
@@ -841,6 +860,13 @@ do_richcmp(PyObject *v, PyObject *w, int op)
return try_3way_to_rich_compare(v, w, op);
}
+/* Return:
+ NULL for exception;
+ NotImplemented if this particular rich comparison is not implemented or
+ undefined;
+ some object not equal to NotImplemented if it is implemented
+ (this latter object may not be a Boolean).
+*/
PyObject *
PyObject_RichCompare(PyObject *v, PyObject *w, int op)
{