(&mut self)
| 910 | } |
| 911 | |
| 912 | fn parse_iflet_or_expr(&mut self) -> Result<IfLetOrExpr> { |
| 913 | let pos = self.pos(); |
| 914 | if self.is_lparen() { |
| 915 | self.expect_lparen()?; |
| 916 | let ret = if self.eat_sym_str("if-let")? { |
| 917 | IfLetOrExpr::IfLet(self.parse_iflet()?) |
| 918 | } else if self.eat_sym_str("if")? { |
| 919 | // Shorthand form: `(if (x))` desugars to `(if-let _ |
| 920 | // (x))`. |
| 921 | IfLetOrExpr::IfLet(self.parse_iflet_if()?) |
| 922 | } else { |
| 923 | IfLetOrExpr::Expr(self.parse_expr_inner_parens(pos)?) |
| 924 | }; |
| 925 | self.expect_rparen()?; |
| 926 | Ok(ret) |
| 927 | } else { |
| 928 | self.parse_expr().map(IfLetOrExpr::Expr) |
| 929 | } |
| 930 | } |
| 931 | |
| 932 | fn parse_iflet(&mut self) -> Result<IfLet> { |
| 933 | let pos = self.pos(); |
no test coverage detected