mirror of
https://github.com/python/cpython.git
synced 2025-07-29 22:24:49 +00:00
Patch #1810 by Thomas Lee, reviewed by myself:
allow compiling Python AST objects into code objects in compile().
This commit is contained in:
parent
b9803421d2
commit
fc8eef3c78
11 changed files with 3256 additions and 62 deletions
|
@ -1,5 +1,6 @@
|
|||
import unittest
|
||||
import sys
|
||||
import _ast
|
||||
from test import test_support
|
||||
|
||||
class TestSpecifics(unittest.TestCase):
|
||||
|
@ -416,6 +417,32 @@ if 1:
|
|||
self.assert_("_A__mangled_mod" in A.f.func_code.co_varnames)
|
||||
self.assert_("__package__" in A.f.func_code.co_varnames)
|
||||
|
||||
def test_compile_ast(self):
|
||||
fname = __file__
|
||||
if fname.lower().endswith(('pyc', 'pyo')):
|
||||
fname = fname[:-1]
|
||||
with open(fname, 'r') as f:
|
||||
fcontents = f.read()
|
||||
sample_code = [
|
||||
['<assign>', 'x = 5'],
|
||||
['<print1>', 'print 1'],
|
||||
['<printv>', 'print v'],
|
||||
['<printTrue>', 'print True'],
|
||||
['<printList>', 'print []'],
|
||||
['<ifblock>', """if True:\n pass\n"""],
|
||||
['<forblock>', """for n in [1, 2, 3]:\n print n\n"""],
|
||||
['<deffunc>', """def foo():\n pass\nfoo()\n"""],
|
||||
[fname, fcontents],
|
||||
]
|
||||
|
||||
for fname, code in sample_code:
|
||||
co1 = compile(code, '%s1' % fname, 'exec')
|
||||
ast = compile(code, '%s2' % fname, 'exec', _ast.PyCF_ONLY_AST)
|
||||
self.assert_(type(ast) == _ast.Module)
|
||||
co2 = compile(ast, '%s3' % fname, 'exec')
|
||||
self.assertEqual(co1, co2)
|
||||
|
||||
|
||||
def test_main():
|
||||
test_support.run_unittest(TestSpecifics)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue