cl-parser: Misc cleanup

This commit is contained in:
John 2025-05-18 04:00:43 -04:00
parent 3e2063835b
commit a5590168ee

View File

@ -290,17 +290,13 @@ impl Parse<'_> for MetaKind {
/// Parses data associated with a [Meta] attribute /// Parses data associated with a [Meta] attribute
fn parse(p: &mut Parser) -> PResult<MetaKind> { fn parse(p: &mut Parser) -> PResult<MetaKind> {
const P: Parsing = Parsing::Meta; const P: Parsing = Parsing::Meta;
let lit_tuple = delim( let tuple = delim(sep(Parse::parse, TokenKind::Comma, PARENS.1, P), PARENS, P);
sep(Literal::parse, TokenKind::Comma, PARENS.1, P),
PARENS,
P,
);
Ok(match p.peek_kind(P) { Ok(match p.peek_kind(P) {
Ok(TokenKind::Eq) => { Ok(TokenKind::Eq) => {
p.consume_peeked(); p.consume_peeked();
MetaKind::Equals(Literal::parse(p)?) MetaKind::Equals(p.parse()?)
} }
Ok(TokenKind::LParen) => MetaKind::Func(lit_tuple(p)?), Ok(TokenKind::LParen) => MetaKind::Func(tuple(p)?),
_ => MetaKind::Plain, _ => MetaKind::Plain,
}) })
} }
@ -329,15 +325,15 @@ impl Parse<'_> for ItemKind {
/// See also: [Item::parse] /// See also: [Item::parse]
fn parse(p: &mut Parser) -> PResult<Self> { fn parse(p: &mut Parser) -> PResult<Self> {
Ok(match p.peek_kind(Parsing::Item)? { Ok(match p.peek_kind(Parsing::Item)? {
TokenKind::Type => Alias::parse(p)?.into(), TokenKind::Type => ItemKind::Alias(p.parse()?),
TokenKind::Const => Const::parse(p)?.into(), TokenKind::Const => ItemKind::Const(p.parse()?),
TokenKind::Static => Static::parse(p)?.into(), TokenKind::Static => ItemKind::Static(p.parse()?),
TokenKind::Mod => Module::parse(p)?.into(), TokenKind::Mod => ItemKind::Module(p.parse()?),
TokenKind::Fn => Function::parse(p)?.into(), TokenKind::Fn => ItemKind::Function(p.parse()?),
TokenKind::Struct => Struct::parse(p)?.into(), TokenKind::Struct => ItemKind::Struct(p.parse()?),
TokenKind::Enum => Enum::parse(p)?.into(), TokenKind::Enum => ItemKind::Enum(p.parse()?),
TokenKind::Impl => Impl::parse(p)?.into(), TokenKind::Impl => ItemKind::Impl(p.parse()?),
TokenKind::Use => Use::parse(p)?.into(), TokenKind::Use => ItemKind::Use(p.parse()?),
t => Err(p.error(Unexpected(t), Parsing::Item))?, t => Err(p.error(Unexpected(t), Parsing::Item))?,
}) })
} }
@ -367,7 +363,7 @@ impl Parse<'_> for Alias {
let out = Ok(Alias { let out = Ok(Alias {
name: Sym::parse(p)?, name: Sym::parse(p)?,
from: if p.match_type(TokenKind::Eq, P).is_ok() { from: if p.match_type(TokenKind::Eq, P).is_ok() {
Some(Ty::parse(p)?.into()) Some(p.parse()?)
} else { } else {
None None
}, },
@ -391,7 +387,7 @@ impl Parse<'_> for Const {
}, },
init: { init: {
p.match_type(TokenKind::Eq, P)?; p.match_type(TokenKind::Eq, P)?;
Expr::parse(p)?.into() p.parse()?
}, },
}); });
p.match_type(TokenKind::Semi, P)?; p.match_type(TokenKind::Semi, P)?;
@ -410,11 +406,11 @@ impl Parse<'_> for Static {
name: Sym::parse(p)?, name: Sym::parse(p)?,
ty: { ty: {
p.match_type(TokenKind::Colon, P)?; p.match_type(TokenKind::Colon, P)?;
Ty::parse(p)?.into() p.parse()?
}, },
init: { init: {
p.match_type(TokenKind::Eq, P)?; p.match_type(TokenKind::Eq, P)?;
Expr::parse(p)?.into() p.parse()?
}, },
}); });
p.match_type(TokenKind::Semi, P)?; p.match_type(TokenKind::Semi, P)?;
@ -770,7 +766,7 @@ impl Parse<'_> for TyRef {
} }
p.consume_peeked(); p.consume_peeked();
} }
Ok(TyRef { count, mutable: Mutability::parse(p)?, to: Box::new(Ty::parse(p)?) }) Ok(TyRef { count, mutable: p.parse()?, to: p.parse()? })
} }
} }
@ -869,8 +865,8 @@ impl Parse<'_> for StmtKind {
fn parse(p: &mut Parser) -> PResult<StmtKind> { fn parse(p: &mut Parser) -> PResult<StmtKind> {
Ok(match p.peek_kind(Parsing::StmtKind)? { Ok(match p.peek_kind(Parsing::StmtKind)? {
TokenKind::Semi => StmtKind::Empty, TokenKind::Semi => StmtKind::Empty,
item_like!() => Item::parse(p)?.into(), item_like!() => StmtKind::Item(p.parse()?),
_ => Expr::parse(p)?.into(), _ => StmtKind::Expr(p.parse()?),
}) })
} }
} }
@ -925,15 +921,15 @@ impl Parse<'_> for Let {
fn parse(p: &mut Parser) -> PResult<Let> { fn parse(p: &mut Parser) -> PResult<Let> {
p.consume_peeked(); p.consume_peeked();
Ok(Let { Ok(Let {
mutable: Mutability::parse(p)?, mutable: p.parse()?,
name: Pattern::parse(p)?, name: p.parse()?,
ty: if p.match_type(TokenKind::Colon, Parsing::Let).is_ok() { ty: if p.match_type(TokenKind::Colon, Parsing::Let).is_ok() {
Some(Ty::parse(p)?.into()) Some(p.parse()?)
} else { } else {
None None
}, },
init: if p.match_type(TokenKind::Eq, Parsing::Let).is_ok() { init: if p.match_type(TokenKind::Eq, Parsing::Let).is_ok() {
Some(Expr::parse(p)?.into()) Some(p.parse()?)
} else { } else {
None None
}, },
@ -972,7 +968,7 @@ impl Parse<'_> for Fielder {
Ok(Fielder { Ok(Fielder {
name: Sym::parse(p)?, name: Sym::parse(p)?,
init: match p.match_type(TokenKind::Colon, P) { init: match p.match_type(TokenKind::Colon, P) {
Ok(_) => Some(Box::new(Expr::parse(p)?)), Ok(_) => Some(p.parse()?),
Err(_) => None, Err(_) => None,
}, },
}) })
@ -986,7 +982,7 @@ impl Parse<'_> for AddrOf {
match p.peek_kind(P)? { match p.peek_kind(P)? {
TokenKind::Amp => { TokenKind::Amp => {
p.consume_peeked(); p.consume_peeked();
Ok(AddrOf { mutable: Mutability::parse(p)?, expr: Expr::parse(p)?.into() }) Ok(AddrOf { mutable: p.parse()?, expr: p.parse()? })
} }
TokenKind::AmpAmp => { TokenKind::AmpAmp => {
let start = p.loc(); let start = p.loc();
@ -996,7 +992,7 @@ impl Parse<'_> for AddrOf {
expr: Expr { expr: Expr {
kind: ExprKind::AddrOf(AddrOf { kind: ExprKind::AddrOf(AddrOf {
mutable: Mutability::parse(p)?, mutable: Mutability::parse(p)?,
expr: Expr::parse(p)?.into(), expr: p.parse()?,
}), }),
span: Span(start, p.loc()), span: Span(start, p.loc()),
} }
@ -1051,13 +1047,10 @@ impl Parse<'_> for For {
/// [For]: `for` [Pattern] `in` [Expr] [Block] [Else]? /// [For]: `for` [Pattern] `in` [Expr] [Block] [Else]?
#[rustfmt::skip] #[rustfmt::skip]
fn parse(p: &mut Parser) -> PResult<For> { fn parse(p: &mut Parser) -> PResult<For> {
p.match_type(TokenKind::For, Parsing::For)?;
let bind = Pattern::parse(p)?;
p.match_type(TokenKind::In, Parsing::For)?;
Ok(For { Ok(For {
bind, bind: delim(Parse::parse, (TokenKind::For, TokenKind::In), Parsing::For)(p)?,
cond: condition(p)?.into(), cond: condition(p)?.into(),
pass: Block::parse(p)?.into(), pass: p.parse()?,
fail: Else::parse(p)?, fail: Else::parse(p)?,
}) })
} }
@ -1069,7 +1062,7 @@ impl Parse<'_> for Else {
match p.peek_kind(Parsing::Else) { match p.peek_kind(Parsing::Else) {
Ok(TokenKind::Else) => { Ok(TokenKind::Else) => {
p.consume_peeked(); p.consume_peeked();
Ok(Expr::parse(p)?.into()) Ok(Else { body: Some(p.parse()?) })
} }
Ok(_) | Err(Error { reason: EndOfInput, .. }) => Ok(None.into()), Ok(_) | Err(Error { reason: EndOfInput, .. }) => Ok(None.into()),
Err(e) => Err(e), Err(e) => Err(e),