Skip to content

Commit e4f8fa6

Browse files
committed
Make sure test_compile pass with all optimization levels
1 parent b6b99bf commit e4f8fa6

File tree

1 file changed

+19
-13
lines changed

1 file changed

+19
-13
lines changed

Lib/test/test_compile.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -583,18 +583,19 @@ def test_compile_ast(self):
583583
with open(fname, encoding='utf-8') as f:
584584
fcontents = f.read()
585585
sample_code = [
586-
['<assign>', 'x = 5'],
587-
['<ifblock>', """if True:\n pass\n"""],
588-
['<forblock>', """for n in [1, 2, 3]:\n print(n)\n"""],
589-
['<deffunc>', """def foo():\n pass\nfoo()\n"""],
590-
[fname, fcontents],
586+
[2, '<assign>', 'x = 5'],
587+
[2, '<ifblock>', """if True:\n pass\n"""],
588+
[1, '<forblock>', """for n in [1, 2, 3]:\n print(n)\n"""],
589+
[1, '<deffunc>', """def foo():\n pass\nfoo()\n"""],
590+
[0, fname, fcontents],
591591
]
592592

593-
for fname, code in sample_code:
594-
co1 = compile(code, '%s1' % fname, 'exec')
595-
ast = compile(code, '%s2' % fname, 'exec', _ast.PyCF_ONLY_AST)
593+
for optval, fname, code in sample_code:
594+
co1 = compile(code, '%s1' % fname, 'exec', optimize=optval)
595+
ast = compile(code, '%s2' % fname, 'exec', _ast.PyCF_ONLY_AST,
596+
optimize=optval)
596597
self.assertTrue(type(ast) == _ast.Module)
597-
co2 = compile(ast, '%s3' % fname, 'exec')
598+
co2 = compile(ast, '%s3' % fname, 'exec', optimize=optval)
598599
self.assertEqual(co1, co2)
599600
# the code object's filename comes from the second compilation step
600601
self.assertEqual(co2.co_filename, '%s3' % fname)
@@ -823,8 +824,10 @@ def f():
823824
else:
824825
return "unused"
825826

826-
self.assertEqual(f.__code__.co_consts,
827-
(f.__doc__, "used"))
827+
if f.__doc__ is None:
828+
self.assertEqual(f.__code__.co_consts, (True, "used"))
829+
else:
830+
self.assertEqual(f.__code__.co_consts, (f.__doc__, "used"))
828831

829832
@support.cpython_only
830833
def test_remove_unused_consts_no_docstring(self):
@@ -862,14 +865,17 @@ def test_remove_unused_consts_extended_args(self):
862865

863866
# Stripping unused constants is not a strict requirement for the
864867
# Python semantics, it's a more an implementation detail.
865-
@support.cpython_only
866868
def test_strip_unused_None(self):
867869
# Python 3.10rc1 appended None to co_consts when None is not used
868870
# at all. See bpo-45056.
869871
def f1():
870872
"docstring"
871873
return 42
872-
self.assertEqual(f1.__code__.co_consts, (f1.__doc__,))
874+
875+
if f1.__doc__ is None:
876+
self.assertEqual(f1.__code__.co_consts, (42,))
877+
else:
878+
self.assertEqual(f1.__code__.co_consts, (f1.__doc__,))
873879

874880
# This is a regression test for a CPython specific peephole optimizer
875881
# implementation bug present in a few releases. It's assertion verifies

0 commit comments

Comments
 (0)