summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2009-10-22 11:22:50 (GMT)
committerRaymond Hettinger <python@rcn.com>2009-10-22 11:22:50 (GMT)
commitaf7adad51d149e66ee3eb66c1765914f0fd7f905 (patch)
treebad46171fbca07a72f698e7a63e312fd952a5fd6
parent42ead48dc17543c0d41d261fdf070a07f576c449 (diff)
downloadcpython-af7adad51d149e66ee3eb66c1765914f0fd7f905.zip
cpython-af7adad51d149e66ee3eb66c1765914f0fd7f905.tar.gz
cpython-af7adad51d149e66ee3eb66c1765914f0fd7f905.tar.bz2
Peephole constant folding had missed UNARY_POSITIVE.
-rw-r--r--Lib/test/test_peepholer.py1
-rw-r--r--Misc/NEWS2
-rw-r--r--Python/peephole.c4
3 files changed, 7 insertions, 0 deletions
diff --git a/Lib/test/test_peepholer.py b/Lib/test/test_peepholer.py
index 5696500..9e8bb69 100644
--- a/Lib/test/test_peepholer.py
+++ b/Lib/test/test_peepholer.py
@@ -150,6 +150,7 @@ class TestTranforms(unittest.TestCase):
for line, elem in (
('-0.5', '(-0.5)'), # unary negative
('~-2', '(1)'), # unary invert
+ ('+1', '(1)'), # unary positive
):
asm = dis_single(line)
self.assertTrue(elem in asm, asm)
diff --git a/Misc/NEWS b/Misc/NEWS
index 96ee2ac..8830b7d 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,8 @@ What's New in Python 3.2 Alpha 1?
Core and Builtins
-----------------
+- Peephole constant folding had missed UNARY_POSITIVE.
+
- Issue #1722344: threading._shutdown() is now called in Py_Finalize(), which
fixes the problem of some exceptions being thrown at shutdown when the
interpreter is killed. Patch by Adam Olsen.
diff --git a/Python/peephole.c b/Python/peephole.c
index 9163091..104db8c 100644
--- a/Python/peephole.c
+++ b/Python/peephole.c
@@ -197,6 +197,9 @@ fold_unaryops_on_constants(unsigned char *codestr, PyObject *consts)
case UNARY_INVERT:
newconst = PyNumber_Invert(v);
break;
+ case UNARY_POSITIVE:
+ newconst = PyNumber_Positive(v);
+ break;
default:
/* Called with an unknown opcode */
PyErr_Format(PyExc_SystemError,
@@ -500,6 +503,7 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
LOAD_CONST c1 UNARY_OP --> LOAD_CONST unary_op(c) */
case UNARY_NEGATIVE:
case UNARY_INVERT:
+ case UNARY_POSITIVE:
if (lastlc >= 1 &&
ISBASICBLOCK(blocks, i-3, 4) &&
fold_unaryops_on_constants(&codestr[i-3], consts)) {