MCPcopy Create free account
hub / github.com/Glyphack/enderpy / parse_for_statement

Method parse_for_statement

parser/src/parser/parser.rs:408–452  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

406 }
407
408 fn parse_for_statement(&mut self) -> Result<Statement, ParsingError> {
409 let node = self.start_node();
410 let is_async = self.eat(Kind::Async);
411 self.bump(Kind::For);
412 let target = self.parse_target_list()?;
413 self.expect(Kind::In)?;
414 let iter_list = self.parse_starred_list(Kind::Colon)?;
415 let iter = match iter_list.len() {
416 0 => {
417 panic!("Unexpected token {:?}", self.cur_token());
418 }
419 1 => iter_list.into_iter().next().unwrap(),
420 _ => Expression::Tuple(Box::new(Tuple {
421 node: self.finish_node(node),
422 elements: iter_list,
423 })),
424 };
425
426 self.expect(Kind::Colon)?;
427 let body = self.parse_suite()?;
428 let orelse = if self.eat(Kind::Else) {
429 self.expect(Kind::Colon)?;
430 self.parse_suite()?
431 } else {
432 vec![]
433 };
434
435 if is_async {
436 Ok(Statement::AsyncForStatement(Box::new(AsyncFor {
437 node: self.finish_node(node),
438 target,
439 iter,
440 body,
441 orelse,
442 })))
443 } else {
444 Ok(Statement::ForStatement(Box::new(For {
445 node: self.finish_node(node),
446 target,
447 iter,
448 body,
449 orelse,
450 })))
451 }
452 }
453
454 fn parse_with_statement(&mut self) -> Result<Statement, ParsingError> {
455 let node = self.start_node();

Callers 1

Calls 12

TupleClass · 0.85
start_nodeMethod · 0.80
eatMethod · 0.80
bumpMethod · 0.80
parse_target_listMethod · 0.80
expectMethod · 0.80
parse_starred_listMethod · 0.80
nextMethod · 0.80
into_iterMethod · 0.80
finish_nodeMethod · 0.80
parse_suiteMethod · 0.80
lenMethod · 0.45

Tested by

no test coverage detected