cl-parser: Misc cleanup
This commit is contained in:
parent
3e2063835b
commit
a5590168ee
@ -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),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user