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

Function parses_struct_destructuring_assignment

crates/hll-to-ir/src/parser.rs:2815–2850  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

2813 Ok(Pattern::Variant {
2814 enum_name,
2815 variant: name,
2816 bindings,
2817 })
2818 }
2819
2820 // Parse a leading int/char literal pattern (optional `-`), else None so the
2821 // caller falls through to identifier-led patterns. Char reuses ascii-byte form.
2822 fn try_parse_literal_pattern(&mut self) -> Result<Option<Literal>, ParserError> {
2823 match self.peek() {
2824 Some(Token::Integer(_)) => Ok(Some(Literal::Integer(self.expect_integer()?))),
2825 Some(Token::HexInteger(_)) => Ok(Some(Literal::HexInteger(self.expect_hex_integer()?))),
2826 Some(Token::BinInteger(_)) => Ok(Some(Literal::BinInteger(self.expect_bin_integer()?))),
2827 Some(Token::Char(value)) => {
2828 let v = *value as i64;
2829 self.advance();
2830 Ok(Some(Literal::Integer(v)))
2831 }
2832 Some(Token::Minus) => {
2833 self.advance();
2834 match self.peek() {
2835 Some(Token::Integer(_)) => Ok(Some(Literal::Integer(-self.expect_integer()?))),
2836 Some(Token::HexInteger(_)) => {
2837 Ok(Some(Literal::HexInteger(-self.expect_hex_integer()?)))
2838 }
2839 Some(Token::BinInteger(_)) => {
2840 Ok(Some(Literal::BinInteger(-self.expect_bin_integer()?)))
2841 }
2842 _ => Err(self.error("expected integer literal after `-` in match pattern")),
2843 }
2844 }
2845 _ => Ok(None),
2846 }
2847 }
2848
2849 // Canonical field init is `.name = expr` so `:` always introduces a type. A
2850 // trailing `..` zero-fills the fields the literal leaves unnamed.
2851 fn parse_struct_literal_fields(&mut self) -> Result<(Vec<FieldInit>, bool), ParserError> {
2852 self.expect_lbrace()?;
2853 let mut fields = Vec::new();

Callers

nothing calls this directly

Calls 1

parse_expressionMethod · 0.80

Tested by

no test coverage detected