[Python-checkins] cpython: Issue #27222: various cleanups in long_rshift. Thanks Oren Milman.

mark.dickinson python-checkins at python.org
Sat Sep 17 12:51:08 EDT 2016


https://hg.python.org/cpython/rev/21b70c835b5b
changeset: 103884:21b70c835b5b
user: Mark Dickinson <dickinsm at gmail.com>
date: Sat Sep 17 17:50:50 2016 +0100
summary:
 Issue #27222: various cleanups in long_rshift. Thanks Oren Milman.
files:
 Misc/NEWS | 3 +++
 Objects/longobject.c | 20 ++++++++------------
 2 files changed, 11 insertions(+), 12 deletions(-)
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@
 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.
 
 - Issue #28131: Fix a regression in zipimport's compile_source(). zipimport
diff --git a/Objects/longobject.c b/Objects/longobject.c
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -4296,22 +4296,22 @@
 PyLongObject *a1, *a2;
 a1 = (PyLongObject *) long_invert(a);
 if (a1 == NULL)
- goto rshift_error;
+ return NULL;
 a2 = (PyLongObject *) long_rshift(a1, b);
 Py_DECREF(a1);
 if (a2 == NULL)
- goto rshift_error;
+ return NULL;
 z = (PyLongObject *) long_invert(a2);
 Py_DECREF(a2);
 }
 else {
 shiftby = PyLong_AsSsize_t((PyObject *)b);
 if (shiftby == -1L && PyErr_Occurred())
- goto rshift_error;
+ return NULL;
 if (shiftby < 0) {
 PyErr_SetString(PyExc_ValueError,
 "negative shift count");
- goto rshift_error;
+ return NULL;
 }
 wordshift = shiftby / PyLong_SHIFT;
 newsize = Py_ABS(Py_SIZE(a)) - wordshift;
@@ -4323,19 +4323,15 @@
 himask = PyLong_MASK ^ lomask;
 z = _PyLong_New(newsize);
 if (z == NULL)
- goto rshift_error;
- if (Py_SIZE(a) < 0)
- Py_SIZE(z) = -(Py_SIZE(z));
+ return NULL;
 for (i = 0, j = wordshift; i < newsize; i++, j++) {
 z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;
 if (i+1 < newsize)
 z->ob_digit[i] |= (a->ob_digit[j+1] << hishift) & himask;
 }
- z = long_normalize(z);
- }
- rshift_error:
- return (PyObject *) maybe_small_long(z);
-
+ z = maybe_small_long(long_normalize(z));
+ }
+ return (PyObject *)z;
 }
 
 static PyObject *
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /