@@ -70,18 +70,22 @@ impl<'a> ParserPrismEnv<'a> {
7070 }
7171
7272 fn parse_expr ( & mut self ) -> PResult < CoreIndex > {
73- self . parse_base ( )
73+ self . parse_statement ( )
7474 }
7575
76- // fn parse_statement(&mut self) -> PResult<()> {
77- // if self.eat_lit("let").is_ok() {
78- // return Ok(())
79- // } else if self.eat_lit("adapt").is_ok() {
80- // return Ok(())
81- // } else {
82- // return Err(self.fail())
83- // }
84- // }
76+ fn parse_statement ( & mut self ) -> PResult < CoreIndex > {
77+ if let Ok ( kw) = self . eat_keyword ( "let" ) {
78+ let name = self . eat_identifier ( ) ?;
79+ let _ = self . eat_symbol ( '=' ) ?;
80+ let value = self . parse_base ( ) ?;
81+ let _ = self . eat_symbol ( ';' ) ?;
82+ let body = self . parse_statement ( ) ?;
83+ // let span = kw.start_pos().span_to(self)
84+ Ok ( self . store ( CorePrismExpr :: Let ( ) , span) )
85+ } else {
86+ self . parse_base ( )
87+ }
88+ }
8589
8690 fn parse_base ( & mut self ) -> PResult < CoreIndex > {
8791 if let Ok ( span) = self . eat_keyword ( "Type" ) {
@@ -90,19 +94,11 @@ impl<'a> ParserPrismEnv<'a> {
9094 let expr = self . parse_expr ( ) ?;
9195 self . eat_paren_close ( ")" ) ?;
9296 Ok ( expr)
97+ } else if let Ok ( ident) = self . eat_identifier ( ) {
98+ Ok ( self . store ( CorePrismExpr :: DeBruijnIndex ( 0 ) , ident) )
9399 } else {
94100 Err ( self . fail ( ) )
95101 }
96-
97- // if let Ok(span) = self.eat_lit("Type") {
98- // Ok(self.store(CorePrismExpr::Type, span))
99- // } else if let Ok(paren_ctx) = self.eat_open_paren("(", ")") {
100- // let expr = self.parse_expr()?;
101- // self.eat_close_paren(paren_ctx)?;
102- // Ok(expr)
103- // } else {
104- // Err(self.fail())
105- // }
106102 }
107103
108104 pub fn store ( & mut self , e : CorePrismExpr , span : Span ) -> CoreIndex {
0 commit comments