mirror of https://github.com/python/cpython
Issue #27222: various cleanups in long_rshift. Thanks Oren Milman.
This commit is contained in:
parent
042ce8a594
commit
92ca535626
|
@ -10,6 +10,9 @@ What's New in Python 3.7.0 alpha 1
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #27222: Clean up redundant code in long_rshift function. Thanks
|
||||||
|
Oren Milman.
|
||||||
|
|
||||||
- Upgrade internal unicode databases to Unicode version 9.0.0.
|
- Upgrade internal unicode databases to Unicode version 9.0.0.
|
||||||
|
|
||||||
- Issue #28131: Fix a regression in zipimport's compile_source(). zipimport
|
- Issue #28131: Fix a regression in zipimport's compile_source(). zipimport
|
||||||
|
|
|
@ -4296,22 +4296,22 @@ long_rshift(PyLongObject *a, PyLongObject *b)
|
||||||
PyLongObject *a1, *a2;
|
PyLongObject *a1, *a2;
|
||||||
a1 = (PyLongObject *) long_invert(a);
|
a1 = (PyLongObject *) long_invert(a);
|
||||||
if (a1 == NULL)
|
if (a1 == NULL)
|
||||||
goto rshift_error;
|
return NULL;
|
||||||
a2 = (PyLongObject *) long_rshift(a1, b);
|
a2 = (PyLongObject *) long_rshift(a1, b);
|
||||||
Py_DECREF(a1);
|
Py_DECREF(a1);
|
||||||
if (a2 == NULL)
|
if (a2 == NULL)
|
||||||
goto rshift_error;
|
return NULL;
|
||||||
z = (PyLongObject *) long_invert(a2);
|
z = (PyLongObject *) long_invert(a2);
|
||||||
Py_DECREF(a2);
|
Py_DECREF(a2);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
shiftby = PyLong_AsSsize_t((PyObject *)b);
|
shiftby = PyLong_AsSsize_t((PyObject *)b);
|
||||||
if (shiftby == -1L && PyErr_Occurred())
|
if (shiftby == -1L && PyErr_Occurred())
|
||||||
goto rshift_error;
|
return NULL;
|
||||||
if (shiftby < 0) {
|
if (shiftby < 0) {
|
||||||
PyErr_SetString(PyExc_ValueError,
|
PyErr_SetString(PyExc_ValueError,
|
||||||
"negative shift count");
|
"negative shift count");
|
||||||
goto rshift_error;
|
return NULL;
|
||||||
}
|
}
|
||||||
wordshift = shiftby / PyLong_SHIFT;
|
wordshift = shiftby / PyLong_SHIFT;
|
||||||
newsize = Py_ABS(Py_SIZE(a)) - wordshift;
|
newsize = Py_ABS(Py_SIZE(a)) - wordshift;
|
||||||
|
@ -4323,19 +4323,15 @@ long_rshift(PyLongObject *a, PyLongObject *b)
|
||||||
himask = PyLong_MASK ^ lomask;
|
himask = PyLong_MASK ^ lomask;
|
||||||
z = _PyLong_New(newsize);
|
z = _PyLong_New(newsize);
|
||||||
if (z == NULL)
|
if (z == NULL)
|
||||||
goto rshift_error;
|
return NULL;
|
||||||
if (Py_SIZE(a) < 0)
|
|
||||||
Py_SIZE(z) = -(Py_SIZE(z));
|
|
||||||
for (i = 0, j = wordshift; i < newsize; i++, j++) {
|
for (i = 0, j = wordshift; i < newsize; i++, j++) {
|
||||||
z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;
|
z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;
|
||||||
if (i+1 < newsize)
|
if (i+1 < newsize)
|
||||||
z->ob_digit[i] |= (a->ob_digit[j+1] << hishift) & himask;
|
z->ob_digit[i] |= (a->ob_digit[j+1] << hishift) & himask;
|
||||||
}
|
}
|
||||||
z = long_normalize(z);
|
z = maybe_small_long(long_normalize(z));
|
||||||
}
|
}
|
||||||
rshift_error:
|
return (PyObject *)z;
|
||||||
return (PyObject *) maybe_small_long(z);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
|
Loading…
Reference in New Issue