summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorPablo Galindo <Pablogsal@gmail.com>2019-07-05 19:13:38 (GMT)
committerMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2019-07-05 19:13:38 (GMT)
commit7d93effeb4f8e86dfa283f2376ec5362275635c6 (patch)
treebc6ded25d208df537e1f89b0ececf67fb1104d1f /Python
parentd5a72923c27e2c270de121f3d3a5116c305b6e00 (diff)
downloadcpython-7d93effeb4f8e86dfa283f2376ec5362275635c6.zip
cpython-7d93effeb4f8e86dfa283f2376ec5362275635c6.tar.gz
cpython-7d93effeb4f8e86dfa283f2376ec5362275635c6.tar.bz2
[3.7] bpo-37500: Revert commit 85ed1712e428f93408f56fc684816f9a85b0ebc0 (GH-14605)
https://bugs.python.org/issue37500
Diffstat (limited to 'Python')
-rw-r--r--Python/compile.c9
-rw-r--r--Python/peephole.c15
2 files changed, 9 insertions, 15 deletions
diff --git a/Python/compile.c b/Python/compile.c
index d2729d4..5688ef8 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -2301,12 +2301,13 @@ compiler_if(struct compiler *c, stmt_ty s)
return 0;
constant = expr_constant(s->v.If.test);
- /* constant = 0: "if 0" Leave the optimizations to
- * the pephole optimizer to check for syntax errors
- * in the block.
+ /* constant = 0: "if 0"
* constant = 1: "if 1", "if 2", ...
* constant = -1: rest */
- if (constant == 1) {
+ if (constant == 0) {
+ if (s->v.If.orelse)
+ VISIT_SEQ(c, stmt, s->v.If.orelse);
+ } else if (constant == 1) {
VISIT_SEQ(c, stmt, s->v.If.body);
} else {
if (asdl_seq_LEN(s->v.If.orelse)) {
diff --git a/Python/peephole.c b/Python/peephole.c
index 277a216..95b3dbb 100644
--- a/Python/peephole.c
+++ b/Python/peephole.c
@@ -304,18 +304,11 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
case LOAD_CONST:
cumlc = lastlc + 1;
if (nextop != POP_JUMP_IF_FALSE ||
- !ISBASICBLOCK(blocks, op_start, i + 1)) {
+ !ISBASICBLOCK(blocks, op_start, i + 1) ||
+ !PyObject_IsTrue(PyList_GET_ITEM(consts, get_arg(codestr, i))))
break;
- }
- PyObject* cnt = PyList_GET_ITEM(consts, get_arg(codestr, i));
- int is_true = PyObject_IsTrue(cnt);
- if (is_true == -1) {
- goto exitError;
- }
- if (is_true == 1) {
- fill_nops(codestr, op_start, nexti + 1);
- cumlc = 0;
- }
+ fill_nops(codestr, op_start, nexti + 1);
+ cumlc = 0;
break;
/* Try to fold tuples of constants.