error system: decl

This commit is contained in:
2026-05-16 04:51:32 +02:00
parent e6bf1e0d2c
commit cbd060149d
+21 -27
View File
@@ -1,7 +1,8 @@
use crate::{
Rule,
ast::*,
error::{AstError, IntoErr},
ast_expr,
error::{AstError, AstResult, IntoErr},
parser::listen_rule,
};
@@ -13,11 +14,10 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for VarDeclStmt {
Rule::var_decl_statement => {
let mut inner = pair.into_inner();
let decl = VarDecl::try_from(inner.next().unwrap()).get()?;
let init = inner.next().map(Expression::try_from).transpose().get()?;
Ok(VarDeclStmt { decl, init })
ast_expr!(VarDeclStmt {
decl: inner.next().unwrap().try_into(),
init: inner.next().map(Expression::try_from).transpose()
})
}
_ => unimplemented!(),
@@ -33,11 +33,10 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for FieldDeclStmt {
Rule::class_field => {
let mut inner = pair.into_inner();
let decl = FieldDecl::try_from(inner.next().unwrap()).get()?;
let init = inner.next().map(Expression::try_from).transpose().get()?;
Ok(FieldDeclStmt { decl, init })
ast_expr!(FieldDeclStmt {
decl: inner.next().unwrap().try_into(),
init: inner.next().map(Expression::try_from).transpose(),
})
}
_ => unimplemented!(),
@@ -62,17 +61,16 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for VarDecl {
Some(TypeExpr::try_from(pair))
}
})
.transpose()
.get()?;
.transpose();
let mutable = listen_rule(&mut inner, Rule::mutable);
let mutable: AstResult<'_, bool> = Ok(listen_rule(&mut inner, Rule::mutable));
let name = Pattern::try_from(inner.next().unwrap()).get()?;
let name = Pattern::try_from(inner.next().unwrap());
Ok(VarDecl {
mutable,
name,
type_,
ast_expr!(VarDecl {
type_: type_,
mutable: mutable,
name: name,
})
}
@@ -89,14 +87,10 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for FieldDecl {
Rule::field => {
let mut inner = pair.into_inner();
let visibility = Visibility::try_from(&mut inner).get()?;
let type_ = TypeExpr::try_from(inner.next().unwrap()).get()?;
let name = Identifier::try_from(inner.next().unwrap()).get()?;
Ok(FieldDecl {
visibility,
type_,
name,
ast_expr!(FieldDecl {
visibility: Visibility::try_from(&mut inner),
type_: TypeExpr::try_from(inner.next().unwrap()),
name: Identifier::try_from(inner.next().unwrap()),
})
}