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

Method parse_comp_for

parser/src/parser/parser.rs:1663–1698  ·  view source on GitHub ↗

https://docs.python.org/3/reference/expressions.html#displays-for-lists-sets-and-dictionaries

(&mut self)

Source from the content-addressed store, hash-verified

1661
1662 // https://docs.python.org/3/reference/expressions.html#displays-for-lists-sets-and-dictionaries
1663 fn parse_comp_for(&mut self) -> Result<Vec<Comprehension>, ParsingError> {
1664 // if current token is async
1665 let node = self.start_node();
1666 let is_async = self.eat(Kind::Async);
1667
1668 let mut generators = vec![];
1669 loop {
1670 self.expect(Kind::For)?;
1671 let target = self.parse_target_list()?;
1672 self.expect(Kind::In)?;
1673 let iter = self.parse_or_test()?;
1674 let ifs = if self.eat(Kind::If) {
1675 let mut ifs = vec![];
1676 loop {
1677 ifs.push(self.parse_or_test()?);
1678 if !self.eat(Kind::If) {
1679 break;
1680 }
1681 }
1682 ifs
1683 } else {
1684 vec![]
1685 };
1686 generators.push(Comprehension {
1687 node: self.finish_node(node),
1688 target,
1689 iter,
1690 ifs,
1691 is_async,
1692 });
1693 if !matches!(self.cur_kind(), Kind::For) {
1694 break;
1695 }
1696 }
1697 Ok(generators)
1698 }
1699
1700 // https://docs.python.org/3/reference/simple_stmts.html#grammar-token-python-grammar-target_list
1701 fn parse_target_list(&mut self) -> Result<Expression, ParsingError> {

Callers 5

parse_listMethod · 0.80
parse_setMethod · 0.80
parse_dictMethod · 0.80
parse_primaryMethod · 0.80

Calls 6

start_nodeMethod · 0.80
eatMethod · 0.80
expectMethod · 0.80
parse_target_listMethod · 0.80
parse_or_testMethod · 0.80
finish_nodeMethod · 0.80

Tested by

no test coverage detected