summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
Diffstat (limited to 'Python')
-rw-r--r--Python/bltinmodule.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 3f7bf4d..ae025e7 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -2687,14 +2687,15 @@ builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
continue;
}
if (PyLong_Check(item)) {
- long value;
- int overflow;
- value = PyLong_AsLongAndOverflow(item, &overflow);
- if (!overflow) {
- re_sum.hi += (double)value;
+ double value = PyLong_AsDouble(item);
+ if (value != -1.0 || !PyErr_Occurred()) {
+ re_sum = cs_add(re_sum, value);
Py_DECREF(item);
continue;
}
+ else {
+ return NULL;
+ }
}
result = PyFloat_FromDouble(cs_to_double(re_sum));
if (result == NULL) {
@@ -2736,19 +2737,20 @@ builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
continue;
}
if (PyLong_Check(item)) {
- long value;
- int overflow;
- value = PyLong_AsLongAndOverflow(item, &overflow);
- if (!overflow) {
- re_sum.hi += (double)value;
+ double value = PyLong_AsDouble(item);
+ if (value != -1.0 || !PyErr_Occurred()) {
+ re_sum = cs_add(re_sum, value);
im_sum.hi += 0.0;
Py_DECREF(item);
continue;
}
+ else {
+ return NULL;
+ }
}
if (PyFloat_Check(item)) {
double value = PyFloat_AS_DOUBLE(item);
- re_sum.hi += value;
+ re_sum = cs_add(re_sum, value);
im_sum.hi += 0.0;
_Py_DECREF_SPECIALIZED(item, _PyFloat_ExactDealloc);
continue;