Parse a for loop.
(self)
| 174 | return nodes.Assign(target, expr, lineno=lineno) |
| 175 | |
| 176 | def parse_for(self): |
| 177 | """Parse a for loop.""" |
| 178 | lineno = self.stream.expect('name:for').lineno |
| 179 | target = self.parse_assign_target(extra_end_rules=('name:in',)) |
| 180 | self.stream.expect('name:in') |
| 181 | iter = self.parse_tuple(with_condexpr=False, |
| 182 | extra_end_rules=('name:recursive',)) |
| 183 | test = None |
| 184 | if self.stream.skip_if('name:if'): |
| 185 | test = self.parse_expression() |
| 186 | recursive = self.stream.skip_if('name:recursive') |
| 187 | body = self.parse_statements(('name:endfor', 'name:else')) |
| 188 | if next(self.stream).value == 'endfor': |
| 189 | else_ = [] |
| 190 | else: |
| 191 | else_ = self.parse_statements(('name:endfor',), drop_needle=True) |
| 192 | return nodes.For(target, iter, body, else_, test, |
| 193 | recursive, lineno=lineno) |
| 194 | |
| 195 | def parse_if(self): |
| 196 | """Parse an if construct.""" |
nothing calls this directly
no test coverage detected