blob: ee2482377decf39725a55cee727de85366e8c8fd [file] [log] [blame]
Benjamin Peterson55e00f22008-08-17 18:02:44 +00001:mod:`symtable` --- Access to the compiler's symbol tables
2==========================================================
3
4.. module:: symtable
5 :synopsis: Interface to the compiler's internal symbol tables.
6
7.. moduleauthor:: Jeremy Hylton <jeremy@alum.mit.edu>
8.. sectionauthor:: Benjamin Peterson
9
10
11Symbol tables are generated by the compiler from AST just before bytecode is
12generated. The symbol table is responsible for calculating the scope of every
13identifier in the code. :mod:`symtable` provides an interface to examine these
14tables.
15
16
17Generating Symbol Tables
18------------------------
19
20.. function:: symtable(code, filename, compile_type)
21
22 Return the toplevel :class:`SymbolTable` for the Python source *code*.
23 *filename* is the name of the file containing the code. *compile_type* is
24 like the *mode* argument to :func:`compile`.
25
26
27Examining Symbol Tables
28-----------------------
29
30.. class:: SymbolTable
31
32 A namespace table for a block. The constructor is not public.
33
34 .. method:: get_type()
35
36 Return the type of the symbol table. Possible values are ``'class'``,
37 ``'module'``, and ``'function'``.
38
39 .. method:: get_id()
40
41 Return the table's identifier.
42
43 .. method:: get_name()
44
45 Return the table's name. This is the name of the class if the table is
46 for a class, the name of the function if the table is for a function, or
47 ``'top'`` if the table is global (:meth:`get_type` returns ``'module'``).
48
49 .. method:: get_lineno()
50
51 Return the number of the first line in the block this table represents.
52
53 .. method:: is_optimized()
54
55 Return ``True`` if the locals in this table can be optimized.
56
57 .. method:: is_nested()
58
59 Return ``True`` if the block is a nested class or function.
60
61 .. method:: has_children()
62
63 Return ``True`` if the block has nested namespaces within it. These can
64 be obtained with :meth:`get_children`.
65
66 .. method:: has_exec()
67
68 Return ``True`` if the block uses ``exec``.
69
70 .. method:: has_import_start()
71
72 Return ``True`` if the block uses a starred from-import.
73
74 .. method:: get_identifiers()
75
76 Return a list of names of symbols in this table.
77
78 .. method:: lookup(name)
79
80 Lookup *name* in the table and return a :class:`Symbol` instance.
81
82 .. method:: get_symbols()
83
84 Return a list of :class:`Symbol` instances for names in the table.
85
86 .. method:: get_children()
87
88 Return a list of the nested symbol tables.
89
90
91.. class:: Function
92
93 A namespace for a function or method. This class inherits
94 :class:`SymbolTable`.
95
96 .. method:: get_parameters()
97
Benjamin Petersonb71caf12008-08-20 12:55:31 +000098 Return a tuple containing names of parameters to this function.
Benjamin Peterson55e00f22008-08-17 18:02:44 +000099
100 .. method:: get_locals()
101
Benjamin Petersonb71caf12008-08-20 12:55:31 +0000102 Return a tuple containing names of locals in this function.
Benjamin Peterson55e00f22008-08-17 18:02:44 +0000103
104 .. method:: get_globals()
105
Benjamin Petersonb71caf12008-08-20 12:55:31 +0000106 Return a tuple containing names of globals in this function.
Benjamin Peterson55e00f22008-08-17 18:02:44 +0000107
108 .. method:: get_frees()
109
Benjamin Petersonb71caf12008-08-20 12:55:31 +0000110 Return a tuple containing names of free variables in this function.
Benjamin Peterson55e00f22008-08-17 18:02:44 +0000111
112
113.. class:: Class
114
115 A namespace of a class. This class inherits :class:`SymbolTable`.
116
117 .. method:: get_methods()
118
Benjamin Petersonb71caf12008-08-20 12:55:31 +0000119 Return a tuple containing the names of methods declared in the class.
Benjamin Peterson55e00f22008-08-17 18:02:44 +0000120
121
122.. class:: Symbol
123
124 An entry in a :class:`SymbolTable` corresponding to an identifier in the
125 source. The constructor is not public.
126
127 .. method:: get_name()
128
129 Return the symbol's name.
130
131 .. method:: is_referenced()
132
133 Return ``True`` if the symbol is used in its block.
134
135 .. method:: is_imported()
136
137 Return ``True`` if the symbol is created from an import statement.
138
139 .. method:: is_parameter()
140
141 Return ``True`` if the symbol is a parameter.
142
143 .. method:: is_global()
144
145 Return ``True`` if the symbol is global.
146
Benjamin Peterson55e00f22008-08-17 18:02:44 +0000147 .. method:: is_local()
148
149 Return ``True`` if the symbol is local to its block.
150
151 .. method:: is_free()
152
153 Return ``True`` if the symbol is referenced in its block, but not assigned
154 to.
155
156 .. method:: is_assigned()
157
158 Return ``True`` if the symbol is assigned to in its block.
159
160 .. method:: is_namespace()
161
162 Return ``True`` if name binding introduces new namespace.
163
164 If the name is used as the target of a function or class statement, this
165 will be true.
166
167 Note that a single name can be bound to multiple objects. If the result
168 is ``True``, the name may also be bound to other objects, like an int or
169 list, that does not introduce a new namespace.
170
171 .. method:: get_namespaces()
172
173 Return a list of namespaces bound to this name.
174
175 .. method:: get_namespace()
176
177 Return the namespace bound to this name. If more than one namespace is
178 bound, a :exc:`ValueError` is raised.