MCPcopy Create free account
hub / github.com/nodejs/node / FrameSymbolVisitor

Class FrameSymbolVisitor

tools/inspector_protocol/jinja2/idtracking.py:203–286  ·  view source on GitHub ↗

A visitor for `Frame.inspect`.

Source from the content-addressed store, hash-verified

201
202
203class FrameSymbolVisitor(NodeVisitor):
204 """A visitor for `Frame.inspect`."""
205
206 def __init__(self, symbols):
207 self.symbols = symbols
208
209 def visit_Name(self, node, store_as_param=False, **kwargs):
210 """All assignments to names go through this function."""
211 if store_as_param or node.ctx == 'param':
212 self.symbols.declare_parameter(node.name)
213 elif node.ctx == 'store':
214 self.symbols.store(node.name)
215 elif node.ctx == 'load':
216 self.symbols.load(node.name)
217
218 def visit_NSRef(self, node, **kwargs):
219 self.symbols.load(node.name)
220
221 def visit_If(self, node, **kwargs):
222 self.visit(node.test, **kwargs)
223
224 original_symbols = self.symbols
225
226 def inner_visit(nodes):
227 self.symbols = rv = original_symbols.copy()
228 for subnode in nodes:
229 self.visit(subnode, **kwargs)
230 self.symbols = original_symbols
231 return rv
232
233 body_symbols = inner_visit(node.body)
234 elif_symbols = inner_visit(node.elif_)
235 else_symbols = inner_visit(node.else_ or ())
236
237 self.symbols.branch_update([body_symbols, elif_symbols, else_symbols])
238
239 def visit_Macro(self, node, **kwargs):
240 self.symbols.store(node.name)
241
242 def visit_Import(self, node, **kwargs):
243 self.generic_visit(node, **kwargs)
244 self.symbols.store(node.target)
245
246 def visit_FromImport(self, node, **kwargs):
247 self.generic_visit(node, **kwargs)
248 for name in node.names:
249 if isinstance(name, tuple):
250 self.symbols.store(name[1])
251 else:
252 self.symbols.store(name)
253
254 def visit_Assign(self, node, **kwargs):
255 """Visit assignments in the correct order."""
256 self.visit(node.node, **kwargs)
257 self.visit(node.target, **kwargs)
258
259 def visit_For(self, node, **kwargs):
260 """Visiting stops at for blocks. However the block sequence

Callers 2

find_symbolsFunction · 0.70
__init__Method · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected