@@ -1599,7 +1599,25 @@ impl<'a> Parser<'a> {
15991599 Token::Arrow if self.dialect.supports_lambda_functions() => {
16001600 self.expect_token(&Token::Arrow)?;
16011601 Ok(Expr::Lambda(LambdaFunction {
1602- params: OneOrManyWithParens::One(w.to_ident(w_span)),
1602+ params: OneOrManyWithParens::One(LambdaFunctionParameter {
1603+ name: w.to_ident(w_span),
1604+ data_type: None,
1605+ }),
1606+ body: Box::new(self.parse_expr()?),
1607+ syntax: LambdaSyntax::Arrow,
1608+ }))
1609+ }
1610+ Token::Word(_)
1611+ if self.peek_nth_token(1).token == Token::Arrow
1612+ && self.dialect.supports_lambda_functions() =>
1613+ {
1614+ let first_param = LambdaFunctionParameter {
1615+ name: w.to_ident(self.peek_nth_token_ref(1).span),
1616+ data_type: self.maybe_parse(|parser| parser.parse_data_type())?,
1617+ };
1618+ self.expect_token(&Token::Arrow)?;
1619+ Ok(Expr::Lambda(LambdaFunction {
1620+ params: OneOrManyWithParens::One(first_param),
16031621 body: Box::new(self.parse_expr()?),
16041622 syntax: LambdaSyntax::Arrow,
16051623 }))
@@ -2185,7 +2203,12 @@ impl<'a> Parser<'a> {
21852203 return Ok(None);
21862204 }
21872205 self.maybe_parse(|p| {
2188- let params = p.parse_comma_separated(|p| p.parse_identifier())?;
2206+ let params = p.parse_comma_separated(|p| {
2207+ Ok(LambdaFunctionParameter {
2208+ name: p.parse_identifier()?,
2209+ data_type: None,
2210+ })
2211+ })?;
21892212 p.expect_token(&Token::RParen)?;
21902213 p.expect_token(&Token::Arrow)?;
21912214 let expr = p.parse_expr()?;
@@ -2210,12 +2233,22 @@ impl<'a> Parser<'a> {
22102233 // Parse the parameters: either a single identifier or comma-separated identifiers
22112234 let params = if self.consume_token(&Token::LParen) {
22122235 // Parenthesized parameters: (x, y)
2213- let params = self.parse_comma_separated(|p| p.parse_identifier())?;
2236+ let params = self.parse_comma_separated(|p| {
2237+ Ok(LambdaFunctionParameter {
2238+ name: p.parse_identifier()?,
2239+ data_type: None,
2240+ })
2241+ })?;
22142242 self.expect_token(&Token::RParen)?;
22152243 OneOrManyWithParens::Many(params)
22162244 } else {
22172245 // Unparenthesized parameters: x or x, y
2218- let params = self.parse_comma_separated(|p| p.parse_identifier())?;
2246+ let params = self.parse_comma_separated(|p| {
2247+ Ok(LambdaFunctionParameter {
2248+ name: p.parse_identifier()?,
2249+ data_type: None,
2250+ })
2251+ })?;
22192252 if params.len() == 1 {
22202253 OneOrManyWithParens::One(params.into_iter().next().unwrap())
22212254 } else {
0 commit comments