1# mode: run
2# ticket: 671
3
4A = 1234
5
6class SimpleAssignment(object):
7    """
8    >>> SimpleAssignment.A
9    1234
10    """
11    A = A
12
13class SimpleRewrite(object):
14    """
15    >>> SimpleRewrite.A
16    4321
17    """
18    A = 4321
19    A = A
20
21def simple_inner(a):
22    """
23    >>> simple_inner(4321).A
24    1234
25    """
26    A = a
27    class X(object):
28        A = A
29    return X
30
31def conditional(a, cond):
32    """
33    >>> conditional(4321, False).A
34    1234
35    >>> conditional(4321, True).A
36    4321
37    """
38    class X(object):
39        if cond:
40            A = a
41        A = A
42    return X
43
44def name_error():
45    """
46    >>> name_error() #doctest: +ELLIPSIS
47    Traceback (most recent call last):
48    ...
49    NameError: ...B...
50    """
51    class X(object):
52        B = B
53
54def conditional_name_error(cond):
55    """
56    >>> conditional_name_error(True).B
57    4321
58    >>> conditional_name_error(False).B #doctest: +ELLIPSIS
59    Traceback (most recent call last):
60    ...
61    NameError: ...B...
62    """
63    class X(object):
64        if cond:
65            B = 4321
66        B = B
67    return X
68
69C = 1111
70del C
71
72def name_error_deleted():
73    """
74    >>> name_error_deleted() #doctest: +ELLIPSIS
75    Traceback (most recent call last):
76    ...
77    NameError: ...C...
78    """
79    class X(object):
80        C = C
81
82_set = set
83
84def name_lookup_order():
85    """
86    >>> Scope = name_lookup_order()
87    >>> Scope().set(2)
88    42
89    >>> Scope.test1 == _set()
90    True
91    >>> Scope.test2 == _set()
92    True
93
94    """
95    class Scope(object):
96        test1 = set()
97        test2 = set()
98
99        def set(self, x):
100            return 42
101
102    return Scope
103