Lines Matching refs:self

25     def __init__(self, parent=None, level=None):
31 self.level = level
32 self.parent = parent
33 self.refs = {}
34 self.loads = {}
35 self.stores = set()
37 def analyze_node(self, node, **kwargs):
38 visitor = RootVisitor(self)
41 def _define_ref(self, name, load=None):
42 ident = "l_%d_%s" % (self.level, name)
43 self.refs[name] = ident
45 self.loads[ident] = load
48 def find_load(self, target):
49 if target in self.loads:
50 return self.loads[target]
51 if self.parent is not None:
52 return self.parent.find_load(target)
54 def find_ref(self, name):
55 if name in self.refs:
56 return self.refs[name]
57 if self.parent is not None:
58 return self.parent.find_ref(name)
60 def ref(self, name):
61 rv = self.find_ref(name)
69 def copy(self):
70 rv = object.__new__(self.__class__)
71 rv.__dict__.update(self.__dict__)
72 rv.refs = self.refs.copy()
73 rv.loads = self.loads.copy()
74 rv.stores = self.stores.copy()
77 def store(self, name):
78 self.stores.add(name)
82 if name not in self.refs:
86 if self.parent is not None:
87 outer_ref = self.parent.find_ref(name)
89 self._define_ref(name, load=(VAR_LOAD_ALIAS, outer_ref))
93 self._define_ref(name, load=(VAR_LOAD_UNDEFINED, None))
95 def declare_parameter(self, name):
96 self.stores.add(name)
97 return self._define_ref(name, load=(VAR_LOAD_PARAMETER, None))
99 def load(self, name):
100 target = self.find_ref(name)
102 self._define_ref(name, load=(VAR_LOAD_RESOLVE, name))
104 def branch_update(self, branch_symbols):
108 if target in self.stores:
113 self.refs.update(sym.refs)
114 self.loads.update(sym.loads)
115 self.stores.update(sym.stores)
120 target = self.find_ref(name)
123 if self.parent is not None:
124 outer_target = self.parent.find_ref(name)
126 self.loads[target] = (VAR_LOAD_ALIAS, outer_target)
128 self.loads[target] = (VAR_LOAD_RESOLVE, name)
130 def dump_stores(self):
132 node = self
136 rv[name] = self.find_ref(name)
140 def dump_param_targets(self):
142 node = self
144 for target, (instr, _) in iteritems(self.loads):
152 def __init__(self, symbols):
153 self.sym_visitor = FrameSymbolVisitor(symbols)
155 def _simple_visit(self, node, **kwargs):
157 self.sym_visitor.visit(child)
167 def visit_AssignBlock(self, node, **kwargs):
169 self.sym_visitor.visit(child)
171 def visit_CallBlock(self, node, **kwargs):
173 self.sym_visitor.visit(child)
175 def visit_OverlayScope(self, node, **kwargs):
177 self.sym_visitor.visit(child)
179 def visit_For(self, node, for_branch="body", **kwargs):
181 self.sym_visitor.visit(node.target, store_as_param=True)
186 self.sym_visitor.visit(node.target, store_as_param=True)
188 self.sym_visitor.visit(node.test)
193 self.sym_visitor.visit(item)
195 def visit_With(self, node, **kwargs):
197 self.sym_visitor.visit(target)
199 self.sym_visitor.visit(child)
201 def generic_visit(self, node, *args, **kwargs):
210 def __init__(self, symbols):
211 self.symbols = symbols
213 def visit_Name(self, node, store_as_param=False, **kwargs):
216 self.symbols.declare_parameter(node.name)
218 self.symbols.store(node.name)
220 self.symbols.load(node.name)
222 def visit_NSRef(self, node, **kwargs):
223 self.symbols.load(node.name)
225 def visit_If(self, node, **kwargs):
226 self.visit(node.test, **kwargs)
228 original_symbols = self.symbols
231 self.symbols = rv = original_symbols.copy()
233 self.visit(subnode, **kwargs)
234 self.symbols = original_symbols
241 self.symbols.branch_update([body_symbols, elif_symbols, else_symbols])
243 def visit_Macro(self, node, **kwargs):
244 self.symbols.store(node.name)
246 def visit_Import(self, node, **kwargs):
247 self.generic_visit(node, **kwargs)
248 self.symbols.store(node.target)
250 def visit_FromImport(self, node, **kwargs):
251 self.generic_visit(node, **kwargs)
254 self.symbols.store(name[1])
256 self.symbols.store(name)
258 def visit_Assign(self, node, **kwargs):
260 self.visit(node.node, **kwargs)
261 self.visit(node.target, **kwargs)
263 def visit_For(self, node, **kwargs):
267 self.visit(node.iter, **kwargs)
269 def visit_CallBlock(self, node, **kwargs):
270 self.visit(node.call, **kwargs)
272 def visit_FilterBlock(self, node, **kwargs):
273 self.visit(node.filter, **kwargs)
275 def visit_With(self, node, **kwargs):
277 self.visit(target)
279 def visit_AssignBlock(self, node, **kwargs):
281 self.visit(node.target, **kwargs)
283 def visit_Scope(self, node, **kwargs):
286 def visit_Block(self, node, **kwargs):
289 def visit_OverlayScope(self, node, **kwargs):