Finishing mass error rewrite

This commit is contained in:
2026-05-14 20:19:22 +02:00
parent 01532baf12
commit 5c732bb8d1
+10 -8
View File
@@ -337,17 +337,19 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for TopLevelKind {
Rule::struct_decl => TopLevelKind::StructDecl { Rule::struct_decl => TopLevelKind::StructDecl {
visibility: Visibility::from(&mut inner), visibility: Visibility::from(&mut inner),
name: Identifier::try_from(inner.next().unwrap()), name: Identifier::try_from(inner.next().unwrap())?,
generics: consume_rule(&mut inner, Rule::generics) generics: consume_rule(&mut inner, Rule::generics)
.map(Generics::try_from) .map(Generics::try_from)
.transpose()?
.unwrap_or_default(), .unwrap_or_default(),
fields: inner fields: inner
.next() .next()
.map(|pair| { .map(|pair| {
pair.into_inner() pair.into_inner()
.map(FieldDecl::try_from) .map(FieldDecl::try_from)
.collect::<ParseResult<'a, Vec<_>>>()? .collect::<ParseResult<'a, Vec<_>>>()
}) })
.transpose()?
.unwrap_or_default(), .unwrap_or_default(),
}, },
@@ -373,7 +375,7 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for TopLevelKind {
Rule::enum_decl => TopLevelKind::EnumDecl { Rule::enum_decl => TopLevelKind::EnumDecl {
visibility: Visibility::from(&mut inner), visibility: Visibility::from(&mut inner),
name: Identifier::try_from(inner.next().unwrap()), name: Identifier::try_from(inner.next().unwrap())?,
generics: consume_rule(&mut inner, Rule::generics) generics: consume_rule(&mut inner, Rule::generics)
.map(Generics::try_from) .map(Generics::try_from)
.transpose()? .transpose()?
@@ -772,11 +774,11 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for VarDeclStmt {
Rule::var_decl_statement => { Rule::var_decl_statement => {
let mut inner = pair.into_inner(); let mut inner = pair.into_inner();
let decl = VarDecl::try_from(inner.next().unwrap()); let decl = VarDecl::try_from(inner.next().unwrap())?;
let init = inner.next().map(Expression::try_from); let init = inner.next().map(Expression::try_from).transpose()?;
VarDeclStmt { decl, init } Ok(VarDeclStmt { decl, init })
} }
_ => unimplemented!(), _ => unimplemented!(),
@@ -944,7 +946,7 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for FunctionDecl {
let params = consume_rule(&mut inner, Rule::param_list) let params = consume_rule(&mut inner, Rule::param_list)
.map({ .map({
let self_param = self_param.clone(); let self_param = self_param.clone();
|params_pair| { |params_pair| -> ParseResult<'a, ParamList> {
let mut params = ParamList::try_from(params_pair)?; let mut params = ParamList::try_from(params_pair)?;
if let Some(x) = self_param { if let Some(x) = self_param {
params.0.insert(0, x); params.0.insert(0, x);
@@ -1013,6 +1015,6 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for Identifier {
type Error = ParseError<'a>; type Error = ParseError<'a>;
fn try_from(pair: pest::iterators::Pair<'a, Rule>) -> Result<Self, Self::Error> { fn try_from(pair: pest::iterators::Pair<'a, Rule>) -> Result<Self, Self::Error> {
Identifier(pair.as_str().to_string()) Ok(Identifier(pair.as_str().to_string()))
} }
} }