[Python-checkins] [3.7] bpo-37500: Revert commit 85ed1712e428f93408f56fc684816f9a85b0ebc0 (GH-14605)

Ned Deily webhook-mailer at python.org
Mon Jul 8 17:54:52 EDT 2019


https://github.com/python/cpython/commit/4834c80d799471a6c9ddaad9c5c82c8af156e4fd
commit: 4834c80d799471a6c9ddaad9c5c82c8af156e4fd
branch: 3.7
author: Pablo Galindo <Pablogsal at gmail.com>
committer: Ned Deily <nad at python.org>
date: 2019年07月08日T12:08:31-04:00
summary:
[3.7] bpo-37500: Revert commit 85ed1712e428f93408f56fc684816f9a85b0ebc0 (GH-14605)
https://bugs.python.org/issue37500
files:
M Lib/test/test_syntax.py
M Python/compile.c
M Python/peephole.c
diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py
index 4918e5c4c428..2b96a94401a8 100644
--- a/Lib/test/test_syntax.py
+++ b/Lib/test/test_syntax.py
@@ -650,20 +650,6 @@ def error2():
 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 d2729d4c6ca3..5688ef8479c0 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 277a216ae075..95b3dbb6bf51 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.


More information about the Python-checkins mailing list

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