MCPcopy Create free account
hub / github.com/Glyphack/enderpy / parse_slice

Method parse_slice

parser/src/parser/parser.rs:2938–3081  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

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,

Callers 1

parse_slicesMethod · 0.80

Calls 8

SliceClass · 0.85
start_nodeMethod · 0.80
eatMethod · 0.80
atMethod · 0.80
expectMethod · 0.80
finish_nodeMethod · 0.80
parse_expressionMethod · 0.80

Tested by

no test coverage detected