~pythonregexp2.7/python/issue2636-09-01+10

« back to all changes in this revision

Viewing changes to Doc/library/symtable.rst

  • Committer: Jeffrey C. "The TimeHorse" Jacobs
  • Date: 2008-09-22 21:39:45 UTC
  • mfrom: (39055.1.33 Regexp-2.7)
  • Revision ID: darklord@timehorse.com-20080922213945-23717m5eiqpamcyn
Merged in changes from the Single-Loop Engine branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
: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
 
 
11
Symbol tables are generated by the compiler from AST just before bytecode is
 
12
generated.  The symbol table is responsible for calculating the scope of every
 
13
identifier in the code.  :mod:`symtable` provides an interface to examine these
 
14
tables.
 
15
 
 
16
 
 
17
Generating 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
 
 
27
Examining 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
 
 
98
      Return a tuple containing names of parameters to this function.
 
99
 
 
100
   .. method:: get_locals()
 
101
 
 
102
      Return a tuple containing names of locals in this function.
 
103
 
 
104
   .. method:: get_globals()
 
105
 
 
106
      Return a tuple containing names of globals in this function.
 
107
 
 
108
   .. method:: get_frees()
 
109
 
 
110
      Return a tuple containing names of free variables in this function.
 
111
 
 
112
 
 
113
.. class:: Class
 
114
 
 
115
   A namespace of a class.  This class inherits :class:`SymbolTable`.
 
116
 
 
117
   .. method:: get_methods()
 
118
 
 
119
      Return a tuple containing the names of methods declared in the class.
 
120
 
 
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
 
 
147
   .. 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.