No code change -- just trying to document the return conditions for all

the internal comparison routines.
This commit is contained in:
Tim Peters 2001-11-04 05:57:16 +00:00
parent ebf5427bfa
commit c99213f993

View file

@ -396,9 +396,9 @@ try_rich_compare(PyObject *v, PyObject *w, int op)
/* Try a genuine rich comparison, returning an int. Return: /* Try a genuine rich comparison, returning an int. Return:
-1 for exception (including the case where try_rich_compare() returns an -1 for exception (including the case where try_rich_compare() returns an
object that's not a Boolean); object that's not a Boolean);
0 if the outcome is false; 0 if the outcome is false;
1 if the outcome is true; 1 if the outcome is true;
2 if this particular rich comparison is not implemented or undefined. 2 if this particular rich comparison is not implemented or undefined.
*/ */
static int static int
try_rich_compare_bool(PyObject *v, PyObject *w, int op) 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: /* Try rich comparisons to determine a 3-way comparison. Return:
-2 for an exception; -2 for an exception;
-1 if v < w; -1 if v < w;
0 if v == w; 0 if v == w;
1 if v > w; 1 if v > w;
2 if this particular rich comparison is not implemented or undefined. 2 if this particular rich comparison is not implemented or undefined.
*/ */
static int static int
try_rich_to_3way_compare(PyObject *v, PyObject *w) 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: /* Try a 3-way comparison, returning an int. Return:
-2 for an exception; -2 for an exception;
-1 if v < w; -1 if v < w;
0 if v == w; 0 if v == w;
1 if v > w; 1 if v > w;
2 if this particular 3-way comparison is not implemented or undefined. 2 if this particular 3-way comparison is not implemented or undefined.
*/ */
static int static int
try_3way_compare(PyObject *v, PyObject *w) 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: /* Final fallback 3-way comparison, returning an int. Return:
-2 if an error occurred; -2 if an error occurred;
-1 if v < w; -1 if v < w;
0 if v == w; 0 if v == w;
1 if v > w. 1 if v > w.
*/ */
static int static int
default_3way_compare(PyObject *v, PyObject *w) 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: /* Do a 3-way comparison, by hook or by crook. Return:
-2 for an exception; -2 for an exception;
-1 if v < w; -1 if v < w;
0 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 If the object implements a tp_compare function, it returns
whatever this function returns (whether with an exception or not). whatever this function returns (whether with an exception or not).
*/ */
@ -723,6 +723,13 @@ delete_token(PyObject *token)
Py_DECREF(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 int
PyObject_Compare(PyObject *v, PyObject *w) PyObject_Compare(PyObject *v, PyObject *w)
{ {
@ -771,6 +778,7 @@ PyObject_Compare(PyObject *v, PyObject *w)
return result < 0 ? -1 : result; return result < 0 ? -1 : result;
} }
/* Return (new reference to) Py_True or Py_False. */
static PyObject * static PyObject *
convert_3way_to_object(int op, int c) convert_3way_to_object(int op, int c)
{ {
@ -788,7 +796,12 @@ convert_3way_to_object(int op, int c)
return result; 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 * static PyObject *
try_3way_to_rich_compare(PyObject *v, PyObject *w, int op) 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); 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 * static PyObject *
do_richcmp(PyObject *v, PyObject *w, int op) 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 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 *
PyObject_RichCompare(PyObject *v, PyObject *w, int op) PyObject_RichCompare(PyObject *v, PyObject *w, int op)
{ {