Lines Matching refs:self

27     def __init__(self, parent=None, level=None):
33 self.level = level
34 self.parent = parent
35 self.refs = {}
36 self.loads = {}
37 self.stores = set()
39 def analyze_node(self, node, **kwargs):
40 visitor = RootVisitor(self)
43 def _define_ref(self, name, load=None):
44 ident = 'l_%d_%s' % (self.level, name)
45 self.refs[name] = ident
47 self.loads[ident] = load
50 def find_load(self, target):
51 if target in self.loads:
52 return self.loads[target]
53 if self.parent is not None:
54 return self.parent.find_load(target)
56 def find_ref(self, name):
57 if name in self.refs:
58 return self.refs[name]
59 if self.parent is not None:
60 return self.parent.find_ref(name)
62 def ref(self, name):
63 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):
153 def __init__(self, symbols):
154 self.sym_visitor = FrameSymbolVisitor(symbols)
156 def _simple_visit(self, node, **kwargs):
158 self.sym_visitor.visit(child)
164 def visit_AssignBlock(self, node, **kwargs):
166 self.sym_visitor.visit(child)
168 def visit_CallBlock(self, node, **kwargs):
170 self.sym_visitor.visit(child)
172 def visit_OverlayScope(self, node, **kwargs):
174 self.sym_visitor.visit(child)
176 def visit_For(self, node, for_branch='body', **kwargs):
178 self.sym_visitor.visit(node.target, store_as_param=True)
183 self.sym_visitor.visit(node.target, store_as_param=True)
185 self.sym_visitor.visit(node.test)
190 self.sym_visitor.visit(item)
192 def visit_With(self, node, **kwargs):
194 self.sym_visitor.visit(target)
196 self.sym_visitor.visit(child)
198 def generic_visit(self, node, *args, **kwargs):
206 def __init__(self, symbols):
207 self.symbols = symbols
209 def visit_Name(self, node, store_as_param=False, **kwargs):
212 self.symbols.declare_parameter(node.name)
214 self.symbols.store(node.name)
216 self.symbols.load(node.name)
218 def visit_NSRef(self, node, **kwargs):
219 self.symbols.load(node.name)
221 def visit_If(self, node, **kwargs):
222 self.visit(node.test, **kwargs)
224 original_symbols = self.symbols
227 self.symbols = rv = original_symbols.copy()
229 self.visit(subnode, **kwargs)
230 self.symbols = original_symbols
237 self.symbols.branch_update([body_symbols, elif_symbols, else_symbols])
239 def visit_Macro(self, node, **kwargs):
240 self.symbols.store(node.name)
242 def visit_Import(self, node, **kwargs):
243 self.generic_visit(node, **kwargs)
244 self.symbols.store(node.target)
246 def visit_FromImport(self, node, **kwargs):
247 self.generic_visit(node, **kwargs)
250 self.symbols.store(name[1])
252 self.symbols.store(name)
254 def visit_Assign(self, node, **kwargs):
256 self.visit(node.node, **kwargs)
257 self.visit(node.target, **kwargs)
259 def visit_For(self, node, **kwargs):
263 self.visit(node.iter, **kwargs)
265 def visit_CallBlock(self, node, **kwargs):
266 self.visit(node.call, **kwargs)
268 def visit_FilterBlock(self, node, **kwargs):
269 self.visit(node.filter, **kwargs)
271 def visit_With(self, node, **kwargs):
273 self.visit(target)
275 def visit_AssignBlock(self, node, **kwargs):
277 self.visit(node.target, **kwargs)
279 def visit_Scope(self, node, **kwargs):
282 def visit_Block(self, node, **kwargs):
285 def visit_OverlayScope(self, node, **kwargs):