MCPcopy Index your code
hub / github.com/nodejs/node / visit_For

Method visit_For

tools/inspector_protocol/jinja2/compiler.py:1024–1152  ·  view source on GitHub ↗
(self, node, frame)

Source from the content-addressed store, hash-verified

1022 'update((%s))' % ', '.join(imap(repr, discarded_names)))
1023
1024 def visit_For(self, node, frame):
1025 loop_frame = frame.inner()
1026 test_frame = frame.inner()
1027 else_frame = frame.inner()
1028
1029 # try to figure out if we have an extended loop. An extended loop
1030 # is necessary if the loop is in recursive mode if the special loop
1031 # variable is accessed in the body.
1032 extended_loop = node.recursive or 'loop' in \
1033 find_undeclared(node.iter_child_nodes(
1034 only=('body',)), ('loop',))
1035
1036 loop_ref = None
1037 if extended_loop:
1038 loop_ref = loop_frame.symbols.declare_parameter('loop')
1039
1040 loop_frame.symbols.analyze_node(node, for_branch='body')
1041 if node.else_:
1042 else_frame.symbols.analyze_node(node, for_branch='else')
1043
1044 if node.test:
1045 loop_filter_func = self.temporary_identifier()
1046 test_frame.symbols.analyze_node(node, for_branch='test')
1047 self.writeline('%s(fiter):' % self.func(loop_filter_func), node.test)
1048 self.indent()
1049 self.enter_frame(test_frame)
1050 self.writeline(self.environment.is_async and 'async for ' or 'for ')
1051 self.visit(node.target, loop_frame)
1052 self.write(' in ')
1053 self.write(self.environment.is_async and 'auto_aiter(fiter)' or 'fiter')
1054 self.write(':')
1055 self.indent()
1056 self.writeline('if ', node.test)
1057 self.visit(node.test, test_frame)
1058 self.write(':')
1059 self.indent()
1060 self.writeline('yield ')
1061 self.visit(node.target, loop_frame)
1062 self.outdent(3)
1063 self.leave_frame(test_frame, with_python_scope=True)
1064
1065 # if we don't have an recursive loop we have to find the shadowed
1066 # variables at that point. Because loops can be nested but the loop
1067 # variable is a special one we have to enforce aliasing for it.
1068 if node.recursive:
1069 self.writeline('%s(reciter, loop_render_func, depth=0):' %
1070 self.func('loop'), node)
1071 self.indent()
1072 self.buffer(loop_frame)
1073
1074 # Use the same buffer for the else frame
1075 else_frame.buffer = loop_frame.buffer
1076
1077 # make sure the loop variable is a special one and raise a template
1078 # assertion error if a loop tries to write to loop
1079 if extended_loop:
1080 self.writeline('%s = missing' % loop_ref)
1081

Callers

nothing calls this directly

Calls 15

temporary_identifierMethod · 0.95
writelineMethod · 0.95
funcMethod · 0.95
indentMethod · 0.95
enter_frameMethod · 0.95
writeMethod · 0.95
outdentMethod · 0.95
leave_frameMethod · 0.95
bufferMethod · 0.95
failMethod · 0.95
blockvisitMethod · 0.95

Tested by

no test coverage detected