@@ -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\n foo()\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\n foo()\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