]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.7] bpo-37500: Revert commit 85ed1712e428f93408f56fc684816f9a85b0ebc0 (GH-14605)
authorPablo Galindo <Pablogsal@gmail.com>
Fri, 5 Jul 2019 19:13:38 +0000 (20:13 +0100)
committerNed Deily <nad@python.org>
Mon, 8 Jul 2019 16:08:31 +0000 (12:08 -0400)
https://bugs.python.org/issue37500

Lib/test/test_syntax.py
Python/compile.c
Python/peephole.c

index 4918e5c4c4284e076a3b55e3fbdcbf17cd0bd052..2b96a94401a87d7451ebaf128da38bfefb6397a3 100644 (file)
@@ -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)
index d2729d4c6ca37839570f2c9140f6511141be1717..5688ef8479c0de3e1872b3b92b08adbd6c636c06 100644 (file)
@@ -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)) {
index 277a216ae0751f037bbc4f29498632fb6c30282c..95b3dbb6bf519292344f39c200847165bd821241 100644 (file)
@@ -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.