Lines Matching refs:self
22 def __init__(self):
23 self.__memo = weakref.WeakValueDictionary()
25 def new(self, table, filename):
32 def __call__(self, table, filename):
34 obj = self.__memo.get(key, None)
36 obj = self.__memo[key] = self.new(table, filename)
44 def __init__(self, raw_table, filename):
45 self._table = raw_table
46 self._filename = filename
47 self._symbols = {}
49 def __repr__(self):
50 if self.__class__ == SymbolTable:
53 kind = "%s " % self.__class__.__name__
55 if self._table.name == "top":
56 return "<{0}SymbolTable for module {1}>".format(kind, self._filename)
59 self._table.name,
60 self._filename)
62 def get_type(self):
68 if self._table.type == _symtable.TYPE_MODULE:
70 if self._table.type == _symtable.TYPE_FUNCTION:
72 if self._table.type == _symtable.TYPE_CLASS:
74 assert self._table.type in (1, 2, 3), \
75 "unexpected type: {0}".format(self._table.type)
77 def get_id(self):
80 return self._table.id
82 def get_name(self):
89 return self._table.name
91 def get_lineno(self):
95 return self._table.lineno
97 def is_optimized(self):
101 return bool(self._table.type == _symtable.TYPE_FUNCTION)
103 def is_nested(self):
106 return bool(self._table.nested)
108 def has_children(self):
111 return bool(self._table.children)
113 def get_identifiers(self):
116 return self._table.symbols.keys()
118 def lookup(self, name):
123 sym = self._symbols.get(name)
125 flags = self._table.symbols[name]
126 namespaces = self.__check_children(name)
127 module_scope = (self._table.name == "top")
128 sym = self._symbols[name] = Symbol(name, flags, namespaces,
132 def get_symbols(self):
136 return [self.lookup(ident) for ident in self.get_identifiers()]
138 def __check_children(self, name):
139 return [_newSymbolTable(st, self._filename)
140 for st in self._table.children
143 def get_children(self):
146 return [_newSymbolTable(st, self._filename)
147 for st in self._table.children]
159 def __idents_matching(self, test_func):
160 return tuple(ident for ident in self.get_identifiers()
161 if test_func(self._table.symbols[ident]))
163 def get_parameters(self):
166 if self.__params is None:
167 self.__params = self.__idents_matching(lambda x:x & DEF_PARAM)
168 return self.__params
170 def get_locals(self):
173 if self.__locals is None:
176 self.__locals = self.__idents_matching(test)
177 return self.__locals
179 def get_globals(self):
182 if self.__globals is None:
185 self.__globals = self.__idents_matching(test)
186 return self.__globals
188 def get_nonlocals(self):
191 if self.__nonlocals is None:
192 self.__nonlocals = self.__idents_matching(lambda x:x & DEF_NONLOCAL)
193 return self.__nonlocals
195 def get_frees(self):
198 if self.__frees is None:
200 self.__frees = self.__idents_matching(is_free)
201 return self.__frees
208 def get_methods(self):
211 if self.__methods is None:
213 for st in self._table.children:
215 self.__methods = tuple(d)
216 return self.__methods
221 def __init__(self, name, flags, namespaces=None, *, module_scope=False):
222 self.__name = name
223 self.__flags = flags
224 self.__scope = (flags >> SCOPE_OFF) & SCOPE_MASK # like PyST_GetScope()
225 self.__namespaces = namespaces or ()
226 self.__module_scope = module_scope
228 def __repr__(self):
229 return "<symbol {0!r}>".format(self.__name)
231 def get_name(self):
234 return self.__name
236 def is_referenced(self):
240 return bool(self.__flags & _symtable.USE)
242 def is_parameter(self):
245 return bool(self.__flags & DEF_PARAM)
247 def is_global(self):
250 return bool(self.__scope in (GLOBAL_IMPLICIT, GLOBAL_EXPLICIT)
251 or (self.__module_scope and self.__flags & DEF_BOUND))
253 def is_nonlocal(self):
255 return bool(self.__flags & DEF_NONLOCAL)
257 def is_declared_global(self):
260 return bool(self.__scope == GLOBAL_EXPLICIT)
262 def is_local(self):
265 return bool(self.__scope in (LOCAL, CELL)
266 or (self.__module_scope and self.__flags & DEF_BOUND))
268 def is_annotated(self):
271 return bool(self.__flags & DEF_ANNOT)
273 def is_free(self):
277 return bool(self.__scope == FREE)
279 def is_imported(self):
283 return bool(self.__flags & DEF_IMPORT)
285 def is_assigned(self):
287 return bool(self.__flags & DEF_LOCAL)
289 def is_namespace(self):
300 return bool(self.__namespaces)
302 def get_namespaces(self):
304 return self.__namespaces
306 def get_namespace(self):
312 if len(self.__namespaces) == 0:
314 elif len(self.__namespaces) > 1:
317 return self.__namespaces[0]