[Python-checkins] cpython: Replace noop constant statement with expression

victor.stinner python-checkins at python.org
Mon Feb 8 12:12:02 EST 2016


https://hg.python.org/cpython/rev/bcf27fa55632
changeset:   100191:bcf27fa55632
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Mon Feb 08 17:57:02 2016 +0100
summary:
  Replace noop constant statement with expression

* Constant statements will be ignored and the compiler will emit a
  SyntaxWarning.
* Replace constant statement (ex: "1") with an expression statement
  (ex: "x=1").
* test_traceback: use context manager on the file.

Issue #26204.

files:
  Lib/test/test_inspect.py      |   2 +-
  Lib/test/test_peepholer.py    |  20 +++++++++++---------
  Lib/test/test_support.py      |   3 ++-
  Lib/test/test_sys_settrace.py |   4 ++--
  Lib/test/test_traceback.py    |  14 +++++++-------
  5 files changed, 23 insertions(+), 20 deletions(-)


diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -401,7 +401,7 @@
         self.assertEqual(normcase(inspect.getsourcefile(mod.spam)), modfile)
         self.assertEqual(normcase(inspect.getsourcefile(git.abuse)), modfile)
         fn = "_non_existing_filename_used_for_sourcefile_test.py"
-        co = compile("None", fn, "exec")
+        co = compile("x=1", fn, "exec")
         self.assertEqual(inspect.getsourcefile(co), None)
         linecache.cache[co.co_filename] = (1, None, "None", co.co_filename)
         try:
diff --git a/Lib/test/test_peepholer.py b/Lib/test/test_peepholer.py
--- a/Lib/test/test_peepholer.py
+++ b/Lib/test/test_peepholer.py
@@ -1,9 +1,8 @@
 import dis
 import re
 import sys
-from io import StringIO
+import textwrap
 import unittest
-from math import copysign
 
 from test.bytecode_helper import BytecodeTestCase
 
@@ -30,22 +29,25 @@
 
     def test_global_as_constant(self):
         # LOAD_GLOBAL None/True/False  -->  LOAD_CONST None/True/False
-        def f(x):
-            None
-            None
+        def f():
+            x = None
+            x = None
             return x
-        def g(x):
-            True
+        def g():
+            x = True
             return x
-        def h(x):
-            False
+        def h():
+            x = False
             return x
+
         for func, elem in ((f, None), (g, True), (h, False)):
             self.assertNotInBytecode(func, 'LOAD_GLOBAL')
             self.assertInBytecode(func, 'LOAD_CONST', elem)
+
         def f():
             'Adding a docstring made this test fail in Py2.5.0'
             return None
+
         self.assertNotInBytecode(f, 'LOAD_GLOBAL')
         self.assertInBytecode(f, 'LOAD_CONST', None)
 
diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py
--- a/Lib/test/test_support.py
+++ b/Lib/test/test_support.py
@@ -230,7 +230,8 @@
 
     def test_check_syntax_error(self):
         support.check_syntax_error(self, "def class")
-        self.assertRaises(AssertionError, support.check_syntax_error, self, "1")
+        with self.assertRaises(AssertionError):
+            support.check_syntax_error(self, "x=1")
 
     def test_CleanImport(self):
         import importlib
diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py
--- a/Lib/test/test_sys_settrace.py
+++ b/Lib/test/test_sys_settrace.py
@@ -338,8 +338,8 @@
 
     def test_14_onliner_if(self):
         def onliners():
-            if True: False
-            else: True
+            if True: x=False
+            else: x=True
             return 0
         self.run_and_compare(
             onliners,
diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py
--- a/Lib/test/test_traceback.py
+++ b/Lib/test/test_traceback.py
@@ -129,12 +129,12 @@
         def do_test(firstlines, message, charset, lineno):
             # Raise the message in a subprocess, and catch the output
             try:
-                output = open(TESTFN, "w", encoding=charset)
-                output.write("""{0}if 1:
-                    import traceback;
-                    raise RuntimeError('{1}')
-                    """.format(firstlines, message))
-                output.close()
+                with open(TESTFN, "w", encoding=charset) as output:
+                    output.write("""{0}if 1:
+                        import traceback;
+                        raise RuntimeError('{1}')
+                        """.format(firstlines, message))
+
                 process = subprocess.Popen([sys.executable, TESTFN],
                     stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
                 stdout, stderr = process.communicate()
@@ -176,7 +176,7 @@
             do_test(" \t\f\n# coding: {0}\n".format(charset),
                     text, charset, 5)
         # Issue #18960: coding spec should has no effect
-        do_test("0\n# coding: GBK\n", "h\xe9 ho", 'utf-8', 5)
+        do_test("x=0\n# coding: GBK\n", "h\xe9 ho", 'utf-8', 5)
 
     def test_print_traceback_at_exit(self):
         # Issue #22599: Ensure that it is possible to use the traceback module

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list