From 4834c80d799471a6c9ddaad9c5c82c8af156e4fd Mon Sep 17 00:00:00 2001 From: Pablo Galindo Date: Fri, 5 Jul 2019 20:13:38 +0100 Subject: [3.7] bpo-37500: Revert commit 85ed1712e428f93408f56fc684816f9a85b0ebc0 (GH-14605) https://bugs.python.org/issue37500 --- Lib/test/test_syntax.py | 14 -------------- Python/compile.c | 9 +++++---- Python/peephole.c | 15 ++++----------- 3 files changed, 9 insertions(+), 29 deletions(-) diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index 4918e5c4c4..2b96a94401 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -650,20 +650,6 @@ class SyntaxTestCase(unittest.TestCase): def test_break_outside_loop(self): self._check_error("break", "outside loop") - def test_yield_outside_function(self): - self._check_error("if 0: yield", "outside function") - self._check_error("class C:\n if 0: yield", "outside function") - - def test_return_outside_function(self): - self._check_error("if 0: return", "outside function") - self._check_error("class C:\n if 0: return", "outside function") - - def test_break_outside_loop(self): - self._check_error("if 0: break", "outside loop") - - def test_continue_outside_loop(self): - self._check_error("if 0: continue", "not properly in loop") - def test_unexpected_indent(self): self._check_error("foo()\n bar()\n", "unexpected indent", subclass=IndentationError) diff --git a/Python/compile.c b/Python/compile.c index d2729d4c6c..5688ef8479 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 277a216ae0..95b3dbb6bf 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. -- cgit v1.2.1