Parse postfix expressions: primary_expr[index] | primary_expr
(tokens: &[Token])
| 2043 | |
| 2044 | /// Parse postfix expressions: primary_expr[index] | primary_expr |
| 2045 | fn postfix_expression(tokens: &[Token]) -> IResult<&[Token], Expression> { |
| 2046 | let (mut remaining, mut expr) = primary_expression(tokens)?; |
| 2047 | |
| 2048 | // Check for array indexing: [expression] |
| 2049 | while let Ok((tokens_after_bracket, _)) = expect_token(Token::LeftBracket)(remaining) { |
| 2050 | // Parse the index expression |
| 2051 | let (tokens_after_index, index_expr) = expression(tokens_after_bracket)?; |
| 2052 | let (tokens_after_close, _) = expect_token(Token::RightBracket)(tokens_after_index)?; |
| 2053 | |
| 2054 | // Create an ArrayIndexExpression |
| 2055 | expr = Expression::ArrayIndex(ArrayIndexExpression { |
| 2056 | array: Box::new(expr), |
| 2057 | index: Box::new(index_expr), |
| 2058 | location: Location::default(), |
| 2059 | }); |
| 2060 | |
| 2061 | remaining = tokens_after_close; |
| 2062 | } |
| 2063 | |
| 2064 | Ok((remaining, expr)) |
| 2065 | } |
| 2066 | |
| 2067 | /// Parse primary expression: (expr) | function_call | property_access | value | case_expr |
| 2068 | fn primary_expression(tokens: &[Token]) -> IResult<&[Token], Expression> { |
nothing calls this directly
no test coverage detected