1ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh"""Define names for all type symbols known in the standard interpreter.
2ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
3ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehTypes that are part of optional modules (e.g. array) are not listed.
4ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh"""
5ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport sys
6ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
7ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Iterators in Python aren't a matter of type but of protocol.  A large
8ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# and changing number of builtin types implement *some* flavor of
9ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# iterator.  Don't check the type!  Use hasattr to check for both
10ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# "__iter__" and "next" attributes instead.
11ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
12ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehNoneType = type(None)
13ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehTypeType = type
14ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehObjectType = object
15ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
16ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehIntType = int
17ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehLongType = long
18ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehFloatType = float
19ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehBooleanType = bool
20ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehtry:
21ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    ComplexType = complex
22ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehexcept NameError:
23ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    pass
24ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
25ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehStringType = str
26ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
27ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# StringTypes is already outdated.  Instead of writing "type(x) in
28ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# types.StringTypes", you should use "isinstance(x, basestring)".  But
29ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# we keep around for compatibility with Python 2.2.
30ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehtry:
31ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    UnicodeType = unicode
32ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    StringTypes = (StringType, UnicodeType)
33ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehexcept NameError:
34ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    StringTypes = (StringType,)
35ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
36ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehBufferType = buffer
37ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
38ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehTupleType = tuple
39ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehListType = list
40ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehDictType = DictionaryType = dict
41ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
42ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehdef _f(): pass
43ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehFunctionType = type(_f)
44ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehLambdaType = type(lambda: None)         # Same as FunctionType
45ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehCodeType = type(_f.func_code)
46ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
47ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehdef _g():
48ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    yield 1
49ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehGeneratorType = type(_g())
50ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
51ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass _C:
52ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def _m(self): pass
53ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehClassType = type(_C)
54ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehUnboundMethodType = type(_C._m)         # Same as MethodType
55ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh_x = _C()
56ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehInstanceType = type(_x)
57ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehMethodType = type(_x._m)
58ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
59ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehBuiltinFunctionType = type(len)
60ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehBuiltinMethodType = type([].append)     # Same as BuiltinFunctionType
61ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
62ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehModuleType = type(sys)
63ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehFileType = file
64ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehXRangeType = xrange
65ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
66ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehtry:
67ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    raise TypeError
68ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehexcept TypeError:
69ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    tb = sys.exc_info()[2]
70ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    TracebackType = type(tb)
71ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    FrameType = type(tb.tb_frame)
72ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    del tb
73ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
74ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehSliceType = slice
75ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehEllipsisType = type(Ellipsis)
76ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
77ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehDictProxyType = type(TypeType.__dict__)
78ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehNotImplementedType = type(NotImplemented)
79ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
80ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# For Jython, the following two types are identical
81ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehGetSetDescriptorType = type(FunctionType.func_code)
82ffab958fd8d42ed7227d83007350e61555a1fa36Andrew HsiehMemberDescriptorType = type(FunctionType.func_globals)
83ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
84ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehdel sys, _f, _g, _C, _x                           # Not for export
85