error system: decl
This commit is contained in:
@@ -1,7 +1,8 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
Rule,
|
Rule,
|
||||||
ast::*,
|
ast::*,
|
||||||
error::{AstError, IntoErr},
|
ast_expr,
|
||||||
|
error::{AstError, AstResult, IntoErr},
|
||||||
parser::listen_rule,
|
parser::listen_rule,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -13,11 +14,10 @@ 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()).get()?;
|
ast_expr!(VarDeclStmt {
|
||||||
|
decl: inner.next().unwrap().try_into(),
|
||||||
let init = inner.next().map(Expression::try_from).transpose().get()?;
|
init: inner.next().map(Expression::try_from).transpose()
|
||||||
|
})
|
||||||
Ok(VarDeclStmt { decl, init })
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_ => unimplemented!(),
|
_ => unimplemented!(),
|
||||||
@@ -33,11 +33,10 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for FieldDeclStmt {
|
|||||||
Rule::class_field => {
|
Rule::class_field => {
|
||||||
let mut inner = pair.into_inner();
|
let mut inner = pair.into_inner();
|
||||||
|
|
||||||
let decl = FieldDecl::try_from(inner.next().unwrap()).get()?;
|
ast_expr!(FieldDeclStmt {
|
||||||
|
decl: inner.next().unwrap().try_into(),
|
||||||
let init = inner.next().map(Expression::try_from).transpose().get()?;
|
init: inner.next().map(Expression::try_from).transpose(),
|
||||||
|
})
|
||||||
Ok(FieldDeclStmt { decl, init })
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_ => unimplemented!(),
|
_ => unimplemented!(),
|
||||||
@@ -62,17 +61,16 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for VarDecl {
|
|||||||
Some(TypeExpr::try_from(pair))
|
Some(TypeExpr::try_from(pair))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.transpose()
|
.transpose();
|
||||||
.get()?;
|
|
||||||
|
|
||||||
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 {
|
ast_expr!(VarDecl {
|
||||||
mutable,
|
type_: type_,
|
||||||
name,
|
mutable: mutable,
|
||||||
type_,
|
name: name,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,14 +87,10 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for FieldDecl {
|
|||||||
Rule::field => {
|
Rule::field => {
|
||||||
let mut inner = pair.into_inner();
|
let mut inner = pair.into_inner();
|
||||||
|
|
||||||
let visibility = Visibility::try_from(&mut inner).get()?;
|
ast_expr!(FieldDecl {
|
||||||
let type_ = TypeExpr::try_from(inner.next().unwrap()).get()?;
|
visibility: Visibility::try_from(&mut inner),
|
||||||
let name = Identifier::try_from(inner.next().unwrap()).get()?;
|
type_: TypeExpr::try_from(inner.next().unwrap()),
|
||||||
|
name: Identifier::try_from(inner.next().unwrap()),
|
||||||
Ok(FieldDecl {
|
|
||||||
visibility,
|
|
||||||
type_,
|
|
||||||
name,
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user