@@ -1789,7 +1789,7 @@ impl<'a> Parser<'a> {
17891789
17901790 let leading_trivia = self . parse_leading_trivia ( ) ;
17911791
1792- children. push ( self . parse_ident ( leading_trivia) ?) ;
1792+ children. push ( self . parse_expr ( leading_trivia, false , false ) ?) ;
17931793 children. push ( self . next_node ( |kind| matches ! ( kind, TokenKind :: RParen ) , NodeKind :: Token ) ?) ;
17941794 children. push ( self . next_node ( |kind| matches ! ( kind, TokenKind :: Colon ) , NodeKind :: Token ) ?) ;
17951795
@@ -3249,6 +3249,107 @@ mod tests {
32493249 ErrorReporter :: default ( )
32503250 )
32513251 ) ]
3252+ #[ case:: foreach_value_is_function_call(
3253+ vec![
3254+ Shared :: new( token( TokenKind :: Foreach ) ) ,
3255+ Shared :: new( token( TokenKind :: Whitespace ( 1 ) ) ) ,
3256+ Shared :: new( token( TokenKind :: LParen ) ) ,
3257+ Shared :: new( token( TokenKind :: Ident ( "item" . into( ) ) ) ) ,
3258+ Shared :: new( token( TokenKind :: Comma ) ) ,
3259+ Shared :: new( token( TokenKind :: Ident ( "get_items" . into( ) ) ) ) ,
3260+ Shared :: new( token( TokenKind :: LParen ) ) ,
3261+ Shared :: new( token( TokenKind :: Ident ( "arg" . into( ) ) ) ) ,
3262+ Shared :: new( token( TokenKind :: RParen ) ) ,
3263+ Shared :: new( token( TokenKind :: RParen ) ) ,
3264+ Shared :: new( token( TokenKind :: Colon ) ) ,
3265+ Shared :: new( token( TokenKind :: NewLine ) ) ,
3266+ Shared :: new( token( TokenKind :: Ident ( "body" . into( ) ) ) ) ,
3267+ ] ,
3268+ (
3269+ vec![
3270+ Shared :: new( Node {
3271+ kind: NodeKind :: Foreach ,
3272+ token: Some ( Shared :: new( token( TokenKind :: Foreach ) ) ) ,
3273+ leading_trivia: Vec :: new( ) ,
3274+ trailing_trivia: vec![ Trivia :: Whitespace ( Shared :: new( token( TokenKind :: Whitespace ( 1 ) ) ) ) ] ,
3275+ children: vec![
3276+ Shared :: new( Node {
3277+ kind: NodeKind :: Token ,
3278+ token: Some ( Shared :: new( token( TokenKind :: LParen ) ) ) ,
3279+ leading_trivia: Vec :: new( ) ,
3280+ trailing_trivia: Vec :: new( ) ,
3281+ children: Vec :: new( ) ,
3282+ } ) ,
3283+ Shared :: new( Node {
3284+ kind: NodeKind :: Ident ,
3285+ token: Some ( Shared :: new( token( TokenKind :: Ident ( "item" . into( ) ) ) ) ) ,
3286+ leading_trivia: Vec :: new( ) ,
3287+ trailing_trivia: Vec :: new( ) ,
3288+ children: Vec :: new( ) ,
3289+ } ) ,
3290+ Shared :: new( Node {
3291+ kind: NodeKind :: Token ,
3292+ token: Some ( Shared :: new( token( TokenKind :: Comma ) ) ) ,
3293+ leading_trivia: Vec :: new( ) ,
3294+ trailing_trivia: Vec :: new( ) ,
3295+ children: Vec :: new( ) ,
3296+ } ) ,
3297+ Shared :: new( Node {
3298+ kind: NodeKind :: Call ,
3299+ token: Some ( Shared :: new( token( TokenKind :: Ident ( "get_items" . into( ) ) ) ) ) ,
3300+ leading_trivia: Vec :: new( ) ,
3301+ trailing_trivia: Vec :: new( ) ,
3302+ children: vec![
3303+ Shared :: new( Node {
3304+ kind: NodeKind :: Token ,
3305+ token: Some ( Shared :: new( token( TokenKind :: LParen ) ) ) ,
3306+ leading_trivia: Vec :: new( ) ,
3307+ trailing_trivia: Vec :: new( ) ,
3308+ children: Vec :: new( ) ,
3309+ } ) ,
3310+ Shared :: new( Node {
3311+ kind: NodeKind :: Ident ,
3312+ token: Some ( Shared :: new( token( TokenKind :: Ident ( "arg" . into( ) ) ) ) ) ,
3313+ leading_trivia: Vec :: new( ) ,
3314+ trailing_trivia: Vec :: new( ) ,
3315+ children: Vec :: new( ) ,
3316+ } ) ,
3317+ Shared :: new( Node {
3318+ kind: NodeKind :: Token ,
3319+ token: Some ( Shared :: new( token( TokenKind :: RParen ) ) ) ,
3320+ leading_trivia: Vec :: new( ) ,
3321+ trailing_trivia: Vec :: new( ) ,
3322+ children: Vec :: new( ) ,
3323+ } ) ,
3324+ ] ,
3325+ } ) ,
3326+ Shared :: new( Node {
3327+ kind: NodeKind :: Token ,
3328+ token: Some ( Shared :: new( token( TokenKind :: RParen ) ) ) ,
3329+ leading_trivia: Vec :: new( ) ,
3330+ trailing_trivia: Vec :: new( ) ,
3331+ children: Vec :: new( ) ,
3332+ } ) ,
3333+ Shared :: new( Node {
3334+ kind: NodeKind :: Token ,
3335+ token: Some ( Shared :: new( token( TokenKind :: Colon ) ) ) ,
3336+ leading_trivia: Vec :: new( ) ,
3337+ trailing_trivia: Vec :: new( ) ,
3338+ children: Vec :: new( ) ,
3339+ } ) ,
3340+ Shared :: new( Node {
3341+ kind: NodeKind :: Ident ,
3342+ token: Some ( Shared :: new( token( TokenKind :: Ident ( "body" . into( ) ) ) ) ) ,
3343+ leading_trivia: vec![ Trivia :: NewLine ] ,
3344+ trailing_trivia: Vec :: new( ) ,
3345+ children: Vec :: new( ) ,
3346+ } ) ,
3347+ ] ,
3348+ } ) ,
3349+ ] ,
3350+ ErrorReporter :: default ( )
3351+ )
3352+ ) ]
32523353 #[ case:: while_(
32533354 vec![
32543355 Shared :: new( token( TokenKind :: While ) ) ,
0 commit comments