1# test compile builtin
2
3try:
4    compile
5except NameError:
6    print("SKIP")
7    raise SystemExit
8
9def test():
10    global x
11
12    c = compile("print(x)", "file", "exec")
13
14    try:
15        exec(c)
16    except NameError:
17        print("NameError")
18
19    # global variable for compiled code to access
20    x = 1
21
22    exec(c)
23
24    exec(c, {"x":2})
25    exec(c, {}, {"x":3})
26
27    # single/eval mode
28    exec(compile("if 1: 10 + 1\n", "file", "single"))
29    exec(compile("print(10 + 2)", "file", "single"))
30    print(eval(compile("10 + 3", "file", "eval")))
31
32    # bad mode
33    try:
34        compile('1', 'file', '')
35    except ValueError:
36        print("ValueError")
37
38    # exception within compiled code
39    try:
40        exec(compile('noexist', 'file', 'exec'))
41    except NameError:
42        print("NameError")
43    print(x) # check 'x' still exists as a global
44
45test()
46