mirror of
https://github.com/python/cpython.git
synced 2025-07-16 15:55:18 +00:00
PyObject_Compare can raise an exception now.
This commit is contained in:
parent
5b2121b25f
commit
c8b6df9004
7 changed files with 67 additions and 31 deletions
|
@ -245,10 +245,14 @@ builtin_cmp(self, args)
|
|||
PyObject *args;
|
||||
{
|
||||
PyObject *a, *b;
|
||||
long c;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "OO:cmp", &a, &b))
|
||||
return NULL;
|
||||
return PyInt_FromLong((long)PyObject_Compare(a, b));
|
||||
c = PyObject_Compare(a, b);
|
||||
if (c && PyErr_Occurred())
|
||||
return NULL;
|
||||
return PyInt_FromLong(c);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
|
@ -1073,7 +1077,13 @@ min_max(args, sign)
|
|||
if (w == NULL)
|
||||
w = x;
|
||||
else {
|
||||
if (PyObject_Compare(x, w) * sign > 0) {
|
||||
int c = PyObject_Compare(x, w);
|
||||
if (c && PyErr_Occurred()) {
|
||||
Py_DECREF(x);
|
||||
Py_XDECREF(w);
|
||||
return NULL;
|
||||
}
|
||||
if (c * sign > 0) {
|
||||
Py_DECREF(w);
|
||||
w = x;
|
||||
}
|
||||
|
@ -1360,8 +1370,8 @@ builtin_raw_input(self, args)
|
|||
PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
|
||||
return NULL;
|
||||
}
|
||||
Py_FlushLine();
|
||||
if (PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
|
||||
if (Py_FlushLine() != 0 ||
|
||||
PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
|
||||
return NULL;
|
||||
}
|
||||
f = PySys_GetObject("stdin");
|
||||
|
|
|
@ -456,6 +456,9 @@ eval_code2(co, globals, locals,
|
|||
if (PyObject_Compare(keyword, nm) == 0)
|
||||
break;
|
||||
}
|
||||
/* Check errors from Compare */
|
||||
if (PyErr_Occurred())
|
||||
goto fail;
|
||||
if (j >= co->co_argcount) {
|
||||
if (kwdict == NULL) {
|
||||
PyErr_Format(PyExc_TypeError,
|
||||
|
@ -2475,6 +2478,8 @@ cmp_member(v, w)
|
|||
Py_XDECREF(x);
|
||||
if (cmp == 0)
|
||||
return 1;
|
||||
if (PyErr_Occurred())
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -2507,6 +2512,8 @@ cmp_outcome(op, v, w)
|
|||
break;
|
||||
default:
|
||||
cmp = PyObject_Compare(v, w);
|
||||
if (cmp && PyErr_Occurred())
|
||||
return NULL;
|
||||
switch (op) {
|
||||
case LT: res = cmp < 0; break;
|
||||
case LE: res = cmp <= 0; break;
|
||||
|
|
|
@ -666,7 +666,8 @@ com_add(c, list, v)
|
|||
if (v->ob_type == w->ob_type && PyObject_Compare(v, w) == 0)
|
||||
return i;
|
||||
}
|
||||
if (PyList_Append(list, v) != 0)
|
||||
/* Check for error from PyObject_Compare */
|
||||
if (PyErr_Occurred() || PyList_Append(list, v) != 0)
|
||||
c->c_errors++;
|
||||
return n;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue