@@ -1609,7 +1609,25 @@ impl<'a> Parser<'a> {
16091609 Token::Arrow if self.dialect.supports_lambda_functions() => {
16101610 self.expect_token(&Token::Arrow)?;
16111611 Ok(Expr::Lambda(LambdaFunction {
1612- params: OneOrManyWithParens::One(w.to_ident(w_span)),
1612+ params: OneOrManyWithParens::One(LambdaFunctionParameter {
1613+ name: w.to_ident(w_span),
1614+ data_type: None,
1615+ }),
1616+ body: Box::new(self.parse_expr()?),
1617+ syntax: LambdaSyntax::Arrow,
1618+ }))
1619+ }
1620+ Token::Word(_)
1621+ if self.peek_nth_token(1).token == Token::Arrow
1622+ && self.dialect.supports_lambda_functions() =>
1623+ {
1624+ let first_param = LambdaFunctionParameter {
1625+ name: w.to_ident(self.peek_nth_token_ref(1).span),
1626+ data_type: self.maybe_parse(|parser| parser.parse_data_type())?,
1627+ };
1628+ self.expect_token(&Token::Arrow)?;
1629+ Ok(Expr::Lambda(LambdaFunction {
1630+ params: OneOrManyWithParens::One(first_param),
16131631 body: Box::new(self.parse_expr()?),
16141632 syntax: LambdaSyntax::Arrow,
16151633 }))
@@ -2195,7 +2213,12 @@ impl<'a> Parser<'a> {
21952213 return Ok(None);
21962214 }
21972215 self.maybe_parse(|p| {
2198- let params = p.parse_comma_separated(|p| p.parse_identifier())?;
2216+ let params = p.parse_comma_separated(|p| {
2217+ Ok(LambdaFunctionParameter {
2218+ name: p.parse_identifier()?,
2219+ data_type: None,
2220+ })
2221+ })?;
21992222 p.expect_token(&Token::RParen)?;
22002223 p.expect_token(&Token::Arrow)?;
22012224 let expr = p.parse_expr()?;
@@ -2220,12 +2243,22 @@ impl<'a> Parser<'a> {
22202243 // Parse the parameters: either a single identifier or comma-separated identifiers
22212244 let params = if self.consume_token(&Token::LParen) {
22222245 // Parenthesized parameters: (x, y)
2223- 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+ })?;
22242252 self.expect_token(&Token::RParen)?;
22252253 OneOrManyWithParens::Many(params)
22262254 } else {
22272255 // Unparenthesized parameters: x or x, y
2228- let params = self.parse_comma_separated(|p| p.parse_identifier())?;
2256+ let params = self.parse_comma_separated(|p| {
2257+ Ok(LambdaFunctionParameter {
2258+ name: p.parse_identifier()?,
2259+ data_type: None,
2260+ })
2261+ })?;
22292262 if params.len() == 1 {
22302263 OneOrManyWithParens::One(params.into_iter().next().unwrap())
22312264 } else {
0 commit comments