annotate Lib/test/test_scope.py @ 27998:e27f58a50737 legacy-trunk

SF bug #690377: Dud footnote reference in distutils docs
author Raymond Hettinger <python@rcn.com>
date Fri, 21 Feb 2003 02:47:09 +0000
parents aa0d2d51fbde
children 1c4d192f1568
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
24364
aa0d2d51fbde Get rid of relative imports in all unittests. Now anything that
Barry Warsaw <barry@python.org>
parents: 23187
diff changeset
1 from test.test_support import verify, TestFailed, check_syntax
16262
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
2
19035
c1729cdc0734 silence warnings about import *
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18886
diff changeset
3 import warnings
21431
fd9d7ae3f94a Don't call resetwarnings(). Be more restrictive in what we filter out
Guido van Rossum <guido@python.org>
parents: 21402
diff changeset
4 warnings.filterwarnings("ignore", r"import \*", SyntaxWarning, "<string>")
19035
c1729cdc0734 silence warnings about import *
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18886
diff changeset
5
16262
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
6 print "1. simple nesting"
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
7
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
8 def make_adder(x):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
9 def adder(y):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
10 return x + y
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
11 return adder
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
12
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
13 inc = make_adder(1)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
14 plus10 = make_adder(10)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
15
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
16 verify(inc(1) == 2)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
17 verify(plus10(-2) == 8)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
18
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
19 print "2. extra nesting"
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
20
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
21 def make_adder2(x):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
22 def extra(): # check freevars passing through non-use scopes
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
23 def adder(y):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
24 return x + y
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
25 return adder
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
26 return extra()
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
27
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
28 inc = make_adder2(1)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
29 plus10 = make_adder2(10)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
30
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
31 verify(inc(1) == 2)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
32 verify(plus10(-2) == 8)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
33
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
34 print "3. simple nesting + rebinding"
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
35
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
36 def make_adder3(x):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
37 def adder(y):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
38 return x + y
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
39 x = x + 1 # check tracking of assignment to x in defining scope
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
40 return adder
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
41
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
42 inc = make_adder3(0)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
43 plus10 = make_adder3(9)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
44
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
45 verify(inc(1) == 2)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
46 verify(plus10(-2) == 8)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
47
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
48 print "4. nesting with global but no free"
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
49
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
50 def make_adder4(): # XXX add exta level of indirection
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
51 def nest():
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
52 def nest():
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
53 def adder(y):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
54 return global_x + y # check that plain old globals work
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
55 return adder
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
56 return nest()
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
57 return nest()
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
58
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
59 global_x = 1
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
60 adder = make_adder4()
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
61 verify(adder(1) == 2)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
62
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
63 global_x = 10
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
64 verify(adder(-2) == 8)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
65
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
66 print "5. nesting through class"
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
67
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
68 def make_adder5(x):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
69 class Adder:
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
70 def __call__(self, y):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
71 return x + y
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
72 return Adder()
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
73
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
74 inc = make_adder5(1)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
75 plus10 = make_adder5(10)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
76
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
77 verify(inc(1) == 2)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
78 verify(plus10(-2) == 8)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
79
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
80 print "6. nesting plus free ref to global"
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
81
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
82 def make_adder6(x):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
83 global global_nest_x
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
84 def adder(y):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
85 return global_nest_x + y
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
86 global_nest_x = x
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
87 return adder
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
88
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
89 inc = make_adder6(1)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
90 plus10 = make_adder6(10)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
91
16360
95dae61ced51 Fix test for free ref to global. This test should have caught a
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16262
diff changeset
92 verify(inc(1) == 11) # there's only one global
16262
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
93 verify(plus10(-2) == 8)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
94
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
95 print "7. nearest enclosing scope"
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
96
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
97 def f(x):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
98 def g(y):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
99 x = 42 # check that this masks binding in f()
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
100 def h(z):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
101 return x + z
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
102 return h
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
103 return g(2)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
104
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
105 test_func = f(10)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
106 verify(test_func(5) == 47)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
107
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
108 print "8. mixed freevars and cellvars"
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
109
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
110 def identity(x):
16536
54f7209cc71e Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 16454
diff changeset
111 return x
16262
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
112
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
113 def f(x, y, z):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
114 def g(a, b, c):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
115 a = a + x # 3
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
116 def h():
16536
54f7209cc71e Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 16454
diff changeset
117 # z * (4 + 9)
54f7209cc71e Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 16454
diff changeset
118 # 3 * 13
16262
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
119 return identity(z * (b + y))
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
120 y = c + z # 9
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
121 return h
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
122 return g
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
123
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
124 g = f(1, 2, 3)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
125 h = g(2, 4, 6)
16536
54f7209cc71e Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 16454
diff changeset
126 verify(h() == 39)
16262
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
127
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
128 print "9. free variable in method"
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
129
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
130 def test():
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
131 method_and_var = "var"
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
132 class Test:
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
133 def method_and_var(self):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
134 return "method"
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
135 def test(self):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
136 return method_and_var
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
137 def actual_global(self):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
138 return str("global")
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
139 def str(self):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
140 return str(self)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
141 return Test()
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
142
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
143 t = test()
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
144 verify(t.test() == "var")
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
145 verify(t.method_and_var() == "method")
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
146 verify(t.actual_global() == "global")
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
147
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
148 method_and_var = "var"
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
149 class Test:
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
150 # this class is not nested, so the rules are different
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
151 def method_and_var(self):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
152 return "method"
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
153 def test(self):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
154 return method_and_var
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
155 def actual_global(self):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
156 return str("global")
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
157 def str(self):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
158 return str(self)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
159
16454
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
160 t = Test()
16262
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
161 verify(t.test() == "var")
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
162 verify(t.method_and_var() == "method")
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
163 verify(t.actual_global() == "global")
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
164
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
165 print "10. recursion"
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
166
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
167 def f(x):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
168 def fact(n):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
169 if n == 0:
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
170 return 1
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
171 else:
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
172 return n * fact(n - 1)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
173 if x >= 0:
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
174 return fact(x)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
175 else:
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
176 raise ValueError, "x must be >= 0"
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
177
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
178 verify(f(6) == 720)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
179
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
180
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
181 print "11. unoptimized namespaces"
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
182
18524
1fbcf549c1c4 Remove now-unnecessary "from __future__ import nested_scopes" stmts.
Tim Peters <tim.peters@gmail.com>
parents: 17701
diff changeset
183 check_syntax("""\
16803
44458fe947dd add from __future__ import nested_scopes to strings passed to compile
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16781
diff changeset
184 def unoptimized_clash1(strip):
16262
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
185 def f(s):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
186 from string import *
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
187 return strip(s) # ambiguity: free or local
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
188 return f
16541
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
189 """)
16262
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
190
18524
1fbcf549c1c4 Remove now-unnecessary "from __future__ import nested_scopes" stmts.
Tim Peters <tim.peters@gmail.com>
parents: 17701
diff changeset
191 check_syntax("""\
16803
44458fe947dd add from __future__ import nested_scopes to strings passed to compile
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16781
diff changeset
192 def unoptimized_clash2():
16262
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
193 from string import *
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
194 def f(s):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
195 return strip(s) # ambiguity: global or local
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
196 return f
16541
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
197 """)
16262
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
198
18524
1fbcf549c1c4 Remove now-unnecessary "from __future__ import nested_scopes" stmts.
Tim Peters <tim.peters@gmail.com>
parents: 17701
diff changeset
199 check_syntax("""\
16803
44458fe947dd add from __future__ import nested_scopes to strings passed to compile
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16781
diff changeset
200 def unoptimized_clash2():
16541
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
201 from string import *
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
202 def g():
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
203 def f(s):
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
204 return strip(s) # ambiguity: global or local
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
205 return f
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
206 """)
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
207
16616
e2a63584566f Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 16541
diff changeset
208 # XXX could allow this for exec with const argument, but what's the point
18524
1fbcf549c1c4 Remove now-unnecessary "from __future__ import nested_scopes" stmts.
Tim Peters <tim.peters@gmail.com>
parents: 17701
diff changeset
209 check_syntax("""\
16803
44458fe947dd add from __future__ import nested_scopes to strings passed to compile
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16781
diff changeset
210 def error(y):
16262
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
211 exec "a = 1"
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
212 def f(x):
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
213 return x + y
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
214 return f
16541
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
215 """)
16262
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
216
18524
1fbcf549c1c4 Remove now-unnecessary "from __future__ import nested_scopes" stmts.
Tim Peters <tim.peters@gmail.com>
parents: 17701
diff changeset
217 check_syntax("""\
16803
44458fe947dd add from __future__ import nested_scopes to strings passed to compile
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16781
diff changeset
218 def f(x):
16262
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
219 def g():
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
220 return x
16541
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
221 del x # can't del name
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
222 """)
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
223
18524
1fbcf549c1c4 Remove now-unnecessary "from __future__ import nested_scopes" stmts.
Tim Peters <tim.peters@gmail.com>
parents: 17701
diff changeset
224 check_syntax("""\
16803
44458fe947dd add from __future__ import nested_scopes to strings passed to compile
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16781
diff changeset
225 def f():
16541
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
226 def g():
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
227 from string import *
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
228 return strip # global or local?
16616
e2a63584566f Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 16541
diff changeset
229 """)
16541
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
230
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
231 # and verify a few cases that should work
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
232
19035
c1729cdc0734 silence warnings about import *
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18886
diff changeset
233 exec """
16541
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
234 def noproblem1():
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
235 from string import *
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
236 f = lambda x:x
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
237
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
238 def noproblem2():
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
239 from string import *
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
240 def f(x):
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
241 return x + 1
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
242
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
243 def noproblem3():
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
244 from string import *
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
245 def f(x):
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
246 global y
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
247 y = x
19035
c1729cdc0734 silence warnings about import *
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18886
diff changeset
248 """
16262
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
249
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
250 print "12. lambdas"
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
251
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
252 f1 = lambda x: lambda y: x + y
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
253 inc = f1(1)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
254 plus10 = f1(10)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
255 verify(inc(1) == 2)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
256 verify(plus10(5) == 15)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
257
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
258 f2 = lambda x: (lambda : lambda y: x + y)()
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
259 inc = f2(1)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
260 plus10 = f2(10)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
261 verify(inc(1) == 2)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
262 verify(plus10(5) == 15)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
263
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
264 f3 = lambda x: lambda y: global_x + y
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
265 global_x = 1
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
266 inc = f3(None)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
267 verify(inc(2) == 3)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
268
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
269 f8 = lambda x, y, z: lambda a, b, c: lambda : z * (b + y)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
270 g = f8(1, 2, 3)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
271 h = g(2, 4, 6)
a704ea5eceb6 PEP 227 implementation
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
272 verify(h() == 18)
16454
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
273
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
274 print "13. UnboundLocal"
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
275
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
276 def errorInOuter():
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
277 print y
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
278 def inner():
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
279 return y
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
280 y = 1
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
281
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
282 def errorInInner():
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
283 def inner():
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
284 return y
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
285 inner()
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
286 y = 1
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
287
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
288 try:
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
289 errorInOuter()
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
290 except UnboundLocalError:
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
291 pass
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
292 else:
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
293 raise TestFailed
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
294
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
295 try:
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
296 errorInInner()
17494
a34293ced63b Change error message raised when free variable is not yet bound. It
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17105
diff changeset
297 except NameError:
16454
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
298 pass
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
299 else:
ddce715e49ba Fix test 9 (caught by ?!ng)
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16360
diff changeset
300 raise TestFailed
16541
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
301
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
302 print "14. complex definitions"
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
303
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
304 def makeReturner(*lst):
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
305 def returner():
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
306 return lst
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
307 return returner
16616
e2a63584566f Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 16541
diff changeset
308
16541
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
309 verify(makeReturner(1,2,3)() == (1,2,3))
16616
e2a63584566f Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 16541
diff changeset
310
16541
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
311 def makeReturner2(**kwargs):
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
312 def returner():
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
313 return kwargs
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
314 return returner
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
315
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
316 verify(makeReturner2(a=11)()['a'] == 11)
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
317
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
318 def makeAddPair((a, b)):
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
319 def addPair((c, d)):
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
320 return (a + c, b + d)
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
321 return addPair
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
322
8eed373bce7f update test cases for recent compiler changes: exec/import * in nested
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16536
diff changeset
323 verify(makeAddPair((1, 2))((100, 200)) == (101,202))
16910
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
324
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
325 print "15. scope of global statements"
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
326 # Examples posted by Samuele Pedroni to python-dev on 3/1/2001
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
327
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
328 # I
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
329 x = 7
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
330 def f():
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
331 x = 1
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
332 def g():
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
333 global x
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
334 def i():
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
335 def h():
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
336 return x
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
337 return h()
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
338 return i()
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
339 return g()
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
340 verify(f() == 7)
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
341 verify(x == 7)
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
342
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
343 # II
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
344 x = 7
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
345 def f():
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
346 x = 1
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
347 def g():
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
348 x = 2
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
349 def i():
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
350 def h():
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
351 return x
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
352 return h()
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
353 return i()
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
354 return g()
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
355 verify(f() == 2)
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
356 verify(x == 7)
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
357
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
358 # III
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
359 x = 7
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
360 def f():
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
361 x = 1
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
362 def g():
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
363 global x
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
364 x = 2
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
365 def i():
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
366 def h():
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
367 return x
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
368 return h()
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
369 return i()
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
370 return g()
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
371 verify(f() == 2)
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
372 verify(x == 2)
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
373
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
374 # IV
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
375 x = 7
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
376 def f():
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
377 x = 3
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
378 def g():
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
379 global x
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
380 x = 2
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
381 def i():
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
382 def h():
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
383 return x
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
384 return h()
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
385 return i()
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
386 return g()
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
387 verify(f() == 2)
203ad6f3ef8c Test interaction of global and nested scopes -- thanks to Samuele Pedroni.
Guido van Rossum <guido@python.org>
parents: 16803
diff changeset
388 verify(x == 2)
17035
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
389
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
390 print "16. check leaks"
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
391
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
392 class Foo:
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
393 count = 0
17055
743296ce052b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 17035
diff changeset
394
17035
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
395 def __init__(self):
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
396 Foo.count += 1
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
397
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
398 def __del__(self):
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
399 Foo.count -= 1
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
400
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
401 def f1():
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
402 x = Foo()
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
403 def f2():
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
404 return x
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
405 f2()
17055
743296ce052b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 17035
diff changeset
406
17035
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
407 for i in range(100):
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
408 f1()
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
409
7e1e6725509e Add test to verify that nested functions with free variables don't
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16910
diff changeset
410 verify(Foo.count == 0)
17105
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
411
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
412 print "17. class and global"
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
413
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
414 def test(x):
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
415 class Foo:
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
416 global x
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
417 def __call__(self, y):
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
418 return x + y
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
419 return Foo()
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
420
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
421 x = 0
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
422 verify(test(6)(2) == 8)
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
423 x = -1
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
424 verify(test(3)(2) == 5)
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
425
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
426 print "18. verify that locals() works"
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
427
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
428 def f(x):
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
429 def g(y):
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
430 def h(z):
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
431 return y + z
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
432 w = x + y
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
433 y += 3
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
434 return locals()
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
435 return g
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
436
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
437 d = f(2)(4)
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
438 verify(d.has_key('h'))
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
439 del d['h']
8ff24abeb388 Add tests for recent changes:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17055
diff changeset
440 verify(d == {'x': 2, 'y': 7, 'w': 6})
17494
a34293ced63b Change error message raised when free variable is not yet bound. It
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17105
diff changeset
441
17637
8ff76cf30a8c Fix 2.1 nested scopes crash reported by Evan Simpson
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17494
diff changeset
442 print "19. var is bound and free in class"
8ff76cf30a8c Fix 2.1 nested scopes crash reported by Evan Simpson
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17494
diff changeset
443
8ff76cf30a8c Fix 2.1 nested scopes crash reported by Evan Simpson
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17494
diff changeset
444 def f(x):
8ff76cf30a8c Fix 2.1 nested scopes crash reported by Evan Simpson
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17494
diff changeset
445 class C:
8ff76cf30a8c Fix 2.1 nested scopes crash reported by Evan Simpson
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17494
diff changeset
446 def m(self):
8ff76cf30a8c Fix 2.1 nested scopes crash reported by Evan Simpson
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17494
diff changeset
447 return x
8ff76cf30a8c Fix 2.1 nested scopes crash reported by Evan Simpson
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17494
diff changeset
448 a = x
8ff76cf30a8c Fix 2.1 nested scopes crash reported by Evan Simpson
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17494
diff changeset
449 return C
8ff76cf30a8c Fix 2.1 nested scopes crash reported by Evan Simpson
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17494
diff changeset
450
8ff76cf30a8c Fix 2.1 nested scopes crash reported by Evan Simpson
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17494
diff changeset
451 inst = f(3)()
8ff76cf30a8c Fix 2.1 nested scopes crash reported by Evan Simpson
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17494
diff changeset
452 verify(inst.a == inst.m())
17701
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
453
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
454 print "20. interaction with trace function"
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
455
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
456 import sys
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
457 def tracer(a,b,c):
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
458 return tracer
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
459
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
460 def adaptgetter(name, klass, getter):
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
461 kind, des = getter
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
462 if kind == 1: # AV happens when stepping from this line to next
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
463 if des == "":
21402
3d97a054f9d4 Undo inadvertent change to test_scope in previous checkin
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 21395
diff changeset
464 des = "_%s__%s" % (klass.__name__, name)
17701
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
465 return lambda obj: getattr(obj, des)
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
466
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
467 class TestClass:
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
468 pass
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
469
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
470 sys.settrace(tracer)
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
471 adaptgetter("foo", TestClass, (1, ""))
ded41be84da4 SF patch 419176 from MvL; fixed bug 418977
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17637
diff changeset
472 sys.settrace(None)
18886
c7bb9563b149 Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18524
diff changeset
473
22119
0859e764509e SF #506611, fix sys.setprofile(), sys.settrace() core dumps
Neal Norwitz <nnorwitz@gmail.com>
parents: 21431
diff changeset
474 try: sys.settrace()
0859e764509e SF #506611, fix sys.setprofile(), sys.settrace() core dumps
Neal Norwitz <nnorwitz@gmail.com>
parents: 21431
diff changeset
475 except TypeError: pass
0859e764509e SF #506611, fix sys.setprofile(), sys.settrace() core dumps
Neal Norwitz <nnorwitz@gmail.com>
parents: 21431
diff changeset
476 else: raise TestFailed, 'sys.settrace() did not raise TypeError'
0859e764509e SF #506611, fix sys.setprofile(), sys.settrace() core dumps
Neal Norwitz <nnorwitz@gmail.com>
parents: 21431
diff changeset
477
21395
560222e9d471 Add test for SF bug [ #492403 ] exec() segfaults on closure's func_code
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20518
diff changeset
478 print "20. eval and exec with free variables"
18886
c7bb9563b149 Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18524
diff changeset
479
c7bb9563b149 Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18524
diff changeset
480 def f(x):
c7bb9563b149 Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18524
diff changeset
481 return lambda: x + 1
c7bb9563b149 Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18524
diff changeset
482
c7bb9563b149 Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18524
diff changeset
483 g = f(3)
c7bb9563b149 Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18524
diff changeset
484 try:
c7bb9563b149 Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18524
diff changeset
485 eval(g.func_code)
c7bb9563b149 Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18524
diff changeset
486 except TypeError:
c7bb9563b149 Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18524
diff changeset
487 pass
c7bb9563b149 Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18524
diff changeset
488 else:
c7bb9563b149 Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18524
diff changeset
489 print "eval() should have failed, because code contained free vars"
19035
c1729cdc0734 silence warnings about import *
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18886
diff changeset
490
21395
560222e9d471 Add test for SF bug [ #492403 ] exec() segfaults on closure's func_code
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20518
diff changeset
491 try:
560222e9d471 Add test for SF bug [ #492403 ] exec() segfaults on closure's func_code
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20518
diff changeset
492 exec g.func_code
560222e9d471 Add test for SF bug [ #492403 ] exec() segfaults on closure's func_code
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20518
diff changeset
493 except TypeError:
560222e9d471 Add test for SF bug [ #492403 ] exec() segfaults on closure's func_code
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20518
diff changeset
494 pass
560222e9d471 Add test for SF bug [ #492403 ] exec() segfaults on closure's func_code
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20518
diff changeset
495 else:
560222e9d471 Add test for SF bug [ #492403 ] exec() segfaults on closure's func_code
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20518
diff changeset
496 print "exec should have failed, because code contained free vars"
560222e9d471 Add test for SF bug [ #492403 ] exec() segfaults on closure's func_code
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20518
diff changeset
497
20518
23dc7bb0be4f Add test for local assigned to only in a nested list comp
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20089
diff changeset
498 print "21. list comprehension with local variables"
23dc7bb0be4f Add test for local assigned to only in a nested list comp
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20089
diff changeset
499
23dc7bb0be4f Add test for local assigned to only in a nested list comp
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20089
diff changeset
500 try:
23dc7bb0be4f Add test for local assigned to only in a nested list comp
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20089
diff changeset
501 print bad
23dc7bb0be4f Add test for local assigned to only in a nested list comp
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20089
diff changeset
502 except NameError:
23dc7bb0be4f Add test for local assigned to only in a nested list comp
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20089
diff changeset
503 pass
23dc7bb0be4f Add test for local assigned to only in a nested list comp
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20089
diff changeset
504 else:
23dc7bb0be4f Add test for local assigned to only in a nested list comp
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20089
diff changeset
505 print "bad should not be defined"
23dc7bb0be4f Add test for local assigned to only in a nested list comp
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20089
diff changeset
506
23dc7bb0be4f Add test for local assigned to only in a nested list comp
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20089
diff changeset
507 def x():
23dc7bb0be4f Add test for local assigned to only in a nested list comp
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20089
diff changeset
508 [bad for s in 'a b' for bad in s.split()]
23dc7bb0be4f Add test for local assigned to only in a nested list comp
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20089
diff changeset
509
23dc7bb0be4f Add test for local assigned to only in a nested list comp
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20089
diff changeset
510 x()
23dc7bb0be4f Add test for local assigned to only in a nested list comp
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20089
diff changeset
511 try:
23dc7bb0be4f Add test for local assigned to only in a nested list comp
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20089
diff changeset
512 print bad
23dc7bb0be4f Add test for local assigned to only in a nested list comp
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20089
diff changeset
513 except NameError:
23dc7bb0be4f Add test for local assigned to only in a nested list comp
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20089
diff changeset
514 pass
23187
7c0e8dbcf57a Add test for eval() w/ free variables.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 22119
diff changeset
515
7c0e8dbcf57a Add test for eval() w/ free variables.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 22119
diff changeset
516 print "22. eval with free variables"
7c0e8dbcf57a Add test for eval() w/ free variables.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 22119
diff changeset
517
7c0e8dbcf57a Add test for eval() w/ free variables.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 22119
diff changeset
518 def f(x):
7c0e8dbcf57a Add test for eval() w/ free variables.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 22119
diff changeset
519 def g():
7c0e8dbcf57a Add test for eval() w/ free variables.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 22119
diff changeset
520 x
7c0e8dbcf57a Add test for eval() w/ free variables.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 22119
diff changeset
521 eval("x + 1")
7c0e8dbcf57a Add test for eval() w/ free variables.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 22119
diff changeset
522 return g
7c0e8dbcf57a Add test for eval() w/ free variables.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 22119
diff changeset
523
7c0e8dbcf57a Add test for eval() w/ free variables.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 22119
diff changeset
524 f(4)()