MCPcopy Create free account
hub / github.com/LPC4/Full-Stack / parse_prefix

Method parse_prefix

crates/hll-to-ir/src/parser.rs:940–969  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

938 && trial.match_assign()
939 {
940 *self = trial;
941 let rvalue = self.parse_assignment()?;
942 return Ok(Expression::Assignment {
943 target: Box::new(target),
944 rvalue: Box::new(rvalue),
945 });
946 }
947
948 self.pos = saved_pos;
949 }
950
951 let left = self.parse_or()?;
952 if self.match_assign() {
953 let target = self.expression_to_target(left)?;
954 let rvalue = self.parse_assignment()?;
955 Ok(Expression::Assignment {
956 target: Box::new(target),
957 rvalue: Box::new(rvalue),
958 })
959 } else if let Some(op) = self.match_compound_assign() {
960 // `lhs OP= rhs` desugars to `lhs = lhs OP (rhs)`, so lhs evaluates twice.
961 // HLL assignment targets are simple lvalues, so that is benign.
962 let target = self.expression_to_target(left.clone())?;
963 let rhs = self.parse_assignment()?;
964 let rvalue = Expression::Binary {
965 op,
966 left: Box::new(left),
967 right: Box::new(rhs),
968 };
969 Ok(Expression::Assignment {
970 target: Box::new(target),
971 rvalue: Box::new(rvalue),
972 })

Callers 1

parse_multiplicativeMethod · 0.80

Calls 7

match_minusMethod · 0.80
match_notMethod · 0.80
match_ampersandMethod · 0.80
match_atMethod · 0.80
pushMethod · 0.80
parse_primaryMethod · 0.80
parse_postfixMethod · 0.80

Tested by

no test coverage detected