Parse def declaration: def name params : type := body
(&mut self)
| 70 | |
| 71 | /// Parse def declaration: def name params : type := body |
| 72 | fn parse_def(&mut self) -> crate::Result<DefDecl> { |
| 73 | let start = self.expect(TokenKind::Def)?.span; |
| 74 | |
| 75 | let name = self.parse_ident()?; |
| 76 | let universe_params = self.parse_universe_params()?; |
| 77 | let params = self.parse_params()?; |
| 78 | |
| 79 | let return_type = if self.check(&TokenKind::Colon) { |
| 80 | self.advance(); |
| 81 | Some(Box::new(self.parse_expr()?)) |
| 82 | } else { |
| 83 | None |
| 84 | }; |
| 85 | |
| 86 | self.expect(TokenKind::ColonEq)?; |
| 87 | let body = Box::new(self.parse_expr()?); |
| 88 | |
| 89 | let end = body.span(); |
| 90 | |
| 91 | Ok(DefDecl { |
| 92 | span: start.to(end), |
| 93 | name, |
| 94 | universe_params, |
| 95 | params, |
| 96 | return_type, |
| 97 | body, |
| 98 | }) |
| 99 | } |
| 100 | |
| 101 | /// Parse theorem declaration |
| 102 | fn parse_theorem(&mut self) -> crate::Result<TheoremDecl> { |
no test coverage detected