diff --git a/src/ast.rs b/src/ast.rs index 74c9421..c9b1a6c 100644 --- a/src/ast.rs +++ b/src/ast.rs @@ -92,6 +92,8 @@ pub enum PatOp { Mut, /// Matches the dereference of a pointer (`&pat`) Ref, + /// Matches the dereference of a raw pointer (`*pat`) + Ptr, /// Matches a partial decomposition (`..rest`) or upper-bounded range (`..100`) Rest, /// Matches an exclusive bounded range (`0..100`) @@ -176,7 +178,7 @@ pub enum TypedefKind { pub enum Expr { /// An identifier Id(FqPath), - /// A meta-identifier + /// An escaped token for macro binding MetId(String), /// A literal bool, string, char, or int Lit(Literal), @@ -577,6 +579,7 @@ impl Display for PatOp { Self::Pub => "pub ", Self::Mut => "mut ", Self::Ref => "&", + Self::Ptr => "*", Self::Rest => "..", Self::RangeEx => "..", Self::RangeIn => "..=", diff --git a/src/parser.rs b/src/parser.rs index 8430020..cf1f58e 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -361,6 +361,7 @@ impl<'t> Parse<'t> for Pat { TKind::Bar => p.consume().parse(level)?, TKind::Bang => p.consume().then(Pat::Never), TKind::Amp => Pat::Op(PatOp::Ref, vec![p.consume().parse(PPrec::Max)?]), + TKind::Star => Pat::Op(PatOp::Ptr, vec![p.consume().parse(PPrec::Max)?]), TKind::Mut => Pat::Op(PatOp::Mut, vec![p.consume().parse(PPrec::Max)?]), TKind::Pub => Pat::Op(PatOp::Pub, vec![p.consume().parse(PPrec::Max)?]), TKind::AmpAmp => Pat::Op(