Parse a for loop.
(self)
| 186 | return nodes.AssignBlock(target, filter_node, body, lineno=lineno) |
| 187 | |
| 188 | def parse_for(self): |
| 189 | """Parse a for loop.""" |
| 190 | lineno = self.stream.expect('name:for').lineno |
| 191 | target = self.parse_assign_target(extra_end_rules=('name:in',)) |
| 192 | self.stream.expect('name:in') |
| 193 | iter = self.parse_tuple(with_condexpr=False, |
| 194 | extra_end_rules=('name:recursive',)) |
| 195 | test = None |
| 196 | if self.stream.skip_if('name:if'): |
| 197 | test = self.parse_expression() |
| 198 | recursive = self.stream.skip_if('name:recursive') |
| 199 | body = self.parse_statements(('name:endfor', 'name:else')) |
| 200 | if next(self.stream).value == 'endfor': |
| 201 | else_ = [] |
| 202 | else: |
| 203 | else_ = self.parse_statements(('name:endfor',), drop_needle=True) |
| 204 | return nodes.For(target, iter, body, else_, test, |
| 205 | recursive, lineno=lineno) |
| 206 | |
| 207 | def parse_if(self): |
| 208 | """Parse an if construct.""" |
nothing calls this directly
no test coverage detected