(&mut self)
| 2936 | } |
| 2937 | |
| 2938 | fn parse_slice(&mut self) -> Result<Expression, ParsingError> { |
| 2939 | let node = self.start_node(); |
| 2940 | let named_expression_or_expression = if self.eat(Kind::Colon) { |
| 2941 | None |
| 2942 | } else { |
| 2943 | Some(self.parse_named_expression()?) |
| 2944 | }; |
| 2945 | |
| 2946 | match named_expression_or_expression { |
| 2947 | // [expr |
| 2948 | Some(n) => { |
| 2949 | // [expr ,|] |
| 2950 | if self.at(Kind::RightBrace) || self.at(Kind::Comma) { |
| 2951 | Ok(n) |
| 2952 | // [expr: |
| 2953 | } else { |
| 2954 | self.expect(Kind::Colon); |
| 2955 | // [expr:: |
| 2956 | if self.eat(Kind::Colon) { |
| 2957 | // [expr:: end |
| 2958 | if self.at(Kind::RightBrace) || self.at(Kind::Comma) { |
| 2959 | Ok(Expression::Slice(Box::new(Slice { |
| 2960 | node: self.finish_node(node), |
| 2961 | lower: Some(n), |
| 2962 | upper: None, |
| 2963 | step: None, |
| 2964 | }))) |
| 2965 | // [expr::expr end |
| 2966 | } else { |
| 2967 | let step = Some(self.parse_expression()?); |
| 2968 | Ok(Expression::Slice(Box::new(Slice { |
| 2969 | node: self.finish_node(node), |
| 2970 | lower: Some(n), |
| 2971 | upper: None, |
| 2972 | step, |
| 2973 | }))) |
| 2974 | } |
| 2975 | |
| 2976 | // [expr: ,|] end |
| 2977 | } else if self.at(Kind::RightBrace) || self.at(Kind::Comma) { |
| 2978 | return Ok(Expression::Slice(Box::new(Slice { |
| 2979 | node: self.finish_node(node), |
| 2980 | lower: Some(n), |
| 2981 | upper: None, |
| 2982 | step: None, |
| 2983 | }))); |
| 2984 | // [expr:expr |
| 2985 | } else { |
| 2986 | let upper_or_step = Some(self.parse_expression()?); |
| 2987 | // [expr:expr: |
| 2988 | if self.eat(Kind::Colon) { |
| 2989 | // [expr:expr:] end |
| 2990 | if self.at(Kind::RightBrace) || self.at(Kind::Comma) { |
| 2991 | return Ok(Expression::Slice(Box::new(Slice { |
| 2992 | node: self.finish_node(node), |
| 2993 | lower: Some(n), |
| 2994 | upper: None, |
| 2995 | step: upper_or_step, |
no test coverage detected