@@ -1606,7 +1606,25 @@ impl<'a> Parser<'a> {
16061606 Token::Arrow if self.dialect.supports_lambda_functions() => {
16071607 self.expect_token(&Token::Arrow)?;
16081608 Ok(Expr::Lambda(LambdaFunction {
1609- params: OneOrManyWithParens::One(w.to_ident(w_span)),
1609+ params: OneOrManyWithParens::One(LambdaFunctionParameter {
1610+ name: w.to_ident(w_span),
1611+ data_type: None,
1612+ }),
1613+ body: Box::new(self.parse_expr()?),
1614+ syntax: LambdaSyntax::Arrow,
1615+ }))
1616+ }
1617+ Token::Word(_)
1618+ if self.peek_nth_token(1).token == Token::Arrow
1619+ && self.dialect.supports_lambda_functions() =>
1620+ {
1621+ let first_param = LambdaFunctionParameter {
1622+ name: w.to_ident(self.peek_nth_token_ref(1).span),
1623+ data_type: self.maybe_parse(|parser| parser.parse_data_type())?,
1624+ };
1625+ self.expect_token(&Token::Arrow)?;
1626+ Ok(Expr::Lambda(LambdaFunction {
1627+ params: OneOrManyWithParens::One(first_param),
16101628 body: Box::new(self.parse_expr()?),
16111629 syntax: LambdaSyntax::Arrow,
16121630 }))
@@ -2192,7 +2210,12 @@ impl<'a> Parser<'a> {
21922210 return Ok(None);
21932211 }
21942212 self.maybe_parse(|p| {
2195- let params = p.parse_comma_separated(|p| p.parse_identifier())?;
2213+ let params = p.parse_comma_separated(|p| {
2214+ Ok(LambdaFunctionParameter {
2215+ name: p.parse_identifier()?,
2216+ data_type: None,
2217+ })
2218+ })?;
21962219 p.expect_token(&Token::RParen)?;
21972220 p.expect_token(&Token::Arrow)?;
21982221 let expr = p.parse_expr()?;
@@ -2217,12 +2240,22 @@ impl<'a> Parser<'a> {
22172240 // Parse the parameters: either a single identifier or comma-separated identifiers
22182241 let params = if self.consume_token(&Token::LParen) {
22192242 // Parenthesized parameters: (x, y)
2220- let params = self.parse_comma_separated(|p| p.parse_identifier())?;
2243+ let params = self.parse_comma_separated(|p| {
2244+ Ok(LambdaFunctionParameter {
2245+ name: p.parse_identifier()?,
2246+ data_type: None,
2247+ })
2248+ })?;
22212249 self.expect_token(&Token::RParen)?;
22222250 OneOrManyWithParens::Many(params)
22232251 } else {
22242252 // Unparenthesized parameters: x or x, y
2225- let params = self.parse_comma_separated(|p| p.parse_identifier())?;
2253+ let params = self.parse_comma_separated(|p| {
2254+ Ok(LambdaFunctionParameter {
2255+ name: p.parse_identifier()?,
2256+ data_type: None,
2257+ })
2258+ })?;
22262259 if params.len() == 1 {
22272260 OneOrManyWithParens::One(params.into_iter().next().unwrap())
22282261 } else {
0 commit comments