clean
This commit is contained in:
parent
15dcee9978
commit
4a593664e3
2 changed files with 141 additions and 144 deletions
|
@ -201,11 +201,7 @@ impl<'ast> From<pest::FunctionDefinition<'ast>> for absy::SymbolDeclarationNode<
|
|||
.into_iter()
|
||||
.map(absy::ParameterNode::from)
|
||||
.collect(),
|
||||
statements: function
|
||||
.statements
|
||||
.into_iter()
|
||||
.flat_map(statements_from_statement)
|
||||
.collect(),
|
||||
statements: function.statements.into_iter().map(|s| s.into()).collect(),
|
||||
signature,
|
||||
}
|
||||
.span(span.clone());
|
||||
|
@ -266,16 +262,19 @@ impl<'ast> From<pest::TypedIdentifier<'ast>> for absy::VariableNode<'ast> {
|
|||
}
|
||||
}
|
||||
|
||||
fn statements_from_statement(statement: pest::Statement) -> Vec<absy::StatementNode> {
|
||||
impl<'ast> From<pest::Statement<'ast>> for absy::StatementNode<'ast> {
|
||||
fn from(statement: pest::Statement<'ast>) -> Self {
|
||||
match statement {
|
||||
pest::Statement::Definition(s) => vec![statement_from_definition(s)],
|
||||
pest::Statement::Iteration(s) => vec![absy::StatementNode::from(s)],
|
||||
pest::Statement::Assertion(s) => vec![absy::StatementNode::from(s)],
|
||||
pest::Statement::Return(s) => vec![absy::StatementNode::from(s)],
|
||||
pest::Statement::Definition(s) => absy::StatementNode::from(s),
|
||||
pest::Statement::Iteration(s) => absy::StatementNode::from(s),
|
||||
pest::Statement::Assertion(s) => absy::StatementNode::from(s),
|
||||
pest::Statement::Return(s) => absy::StatementNode::from(s),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn statement_from_definition(definition: pest::DefinitionStatement) -> absy::StatementNode {
|
||||
impl<'ast> From<pest::DefinitionStatement<'ast>> for absy::StatementNode<'ast> {
|
||||
fn from(definition: pest::DefinitionStatement<'ast>) -> Self {
|
||||
use crate::absy::NodeValue;
|
||||
|
||||
let lhs = definition.lhs;
|
||||
|
@ -339,6 +338,7 @@ fn statement_from_definition(definition: pest::DefinitionStatement) -> absy::Sta
|
|||
.span(definition.span)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ast> From<pest::ReturnStatement<'ast>> for absy::StatementNode<'ast> {
|
||||
|
@ -377,11 +377,8 @@ impl<'ast> From<pest::IterationStatement<'ast>> for absy::StatementNode<'ast> {
|
|||
let index = absy::VariableNode::from(statement.index);
|
||||
let from = absy::ExpressionNode::from(statement.from);
|
||||
let to = absy::ExpressionNode::from(statement.to);
|
||||
let statements: Vec<absy::StatementNode<'ast>> = statement
|
||||
.statements
|
||||
.into_iter()
|
||||
.flat_map(statements_from_statement)
|
||||
.collect();
|
||||
let statements: Vec<absy::StatementNode<'ast>> =
|
||||
statement.statements.into_iter().map(|s| s.into()).collect();
|
||||
|
||||
absy::Statement::For(index, from, to, statements).span(statement.span)
|
||||
}
|
||||
|
@ -1260,7 +1257,7 @@ mod tests {
|
|||
span: span.clone(),
|
||||
};
|
||||
|
||||
let statement = statement_from_definition(definition);
|
||||
let statement = absy::StatementNode::from(definition);
|
||||
|
||||
match statement.value {
|
||||
absy::Statement::Assignment(..) => {}
|
||||
|
@ -1299,7 +1296,7 @@ mod tests {
|
|||
span: span.clone(),
|
||||
};
|
||||
|
||||
let statement = statement_from_definition(definition);
|
||||
let statement = absy::StatementNode::from(definition);
|
||||
|
||||
match statement.value {
|
||||
absy::Statement::MultipleDefinition(..) => {}
|
||||
|
@ -1352,9 +1349,9 @@ mod tests {
|
|||
span: span.clone(),
|
||||
};
|
||||
|
||||
let statements = statement_from_definition(definition);
|
||||
let statement = absy::StatementNode::from(definition);
|
||||
|
||||
match statements.value {
|
||||
match statement.value {
|
||||
absy::Statement::MultipleDefinition(..) => {}
|
||||
s => {
|
||||
panic!("should be a Definition, found {}", s);
|
||||
|
|
|
@ -5617,77 +5617,77 @@ mod tests {
|
|||
);
|
||||
}
|
||||
|
||||
// #[test]
|
||||
// fn shadowing_with_same_type() {
|
||||
// // field a
|
||||
// // field a
|
||||
// //
|
||||
// // should fail
|
||||
#[test]
|
||||
fn shadowing_with_same_type() {
|
||||
// field a = 2
|
||||
// field a = 2
|
||||
//
|
||||
// should fail
|
||||
|
||||
// let mut checker: Checker<Bn128Field> = Checker::default();
|
||||
// let _: Result<TypedStatement<Bn128Field>, Vec<ErrorInner>> = checker.check_statement(
|
||||
// Statement::Definition(
|
||||
// absy::Variable::immutable("a", UnresolvedType::FieldElement.mock()).mock(),
|
||||
// false,
|
||||
// )
|
||||
// .mock(),
|
||||
// &*MODULE_ID,
|
||||
// &TypeMap::new(),
|
||||
// );
|
||||
// let s2_checked: Result<TypedStatement<Bn128Field>, Vec<ErrorInner>> = checker
|
||||
// .check_statement(
|
||||
// Statement::Definition(
|
||||
// absy::Variable::immutable("a", UnresolvedType::FieldElement.mock()).mock(),
|
||||
// false,
|
||||
// )
|
||||
// .mock(),
|
||||
// &*MODULE_ID,
|
||||
// &TypeMap::new(),
|
||||
// );
|
||||
// assert_eq!(
|
||||
// s2_checked,
|
||||
// Err(vec![ErrorInner {
|
||||
// pos: Some((Position::mock(), Position::mock())),
|
||||
// message: "Duplicate declaration for variable named a".into()
|
||||
// }])
|
||||
// );
|
||||
// }
|
||||
let mut checker: Checker<Bn128Field> = Checker::default();
|
||||
let _: Result<TypedStatement<Bn128Field>, Vec<ErrorInner>> = checker.check_statement(
|
||||
Statement::Definition(
|
||||
absy::Variable::immutable("a", UnresolvedType::FieldElement.mock()).mock(),
|
||||
absy::Expression::IntConstant(2usize.into()).mock(),
|
||||
)
|
||||
.mock(),
|
||||
&*MODULE_ID,
|
||||
&TypeMap::new(),
|
||||
);
|
||||
let s2_checked: Result<TypedStatement<Bn128Field>, Vec<ErrorInner>> = checker
|
||||
.check_statement(
|
||||
Statement::Definition(
|
||||
absy::Variable::immutable("a", UnresolvedType::FieldElement.mock()).mock(),
|
||||
absy::Expression::IntConstant(2usize.into()).mock(),
|
||||
)
|
||||
.mock(),
|
||||
&*MODULE_ID,
|
||||
&TypeMap::new(),
|
||||
);
|
||||
assert_eq!(
|
||||
s2_checked,
|
||||
Err(vec![ErrorInner {
|
||||
pos: Some((Position::mock(), Position::mock())),
|
||||
message: "Duplicate declaration for variable named a".into()
|
||||
}])
|
||||
);
|
||||
}
|
||||
|
||||
// #[test]
|
||||
// fn shadowing_with_different_type() {
|
||||
// // field a
|
||||
// // bool a
|
||||
// //
|
||||
// // should fail
|
||||
#[test]
|
||||
fn shadowing_with_different_type() {
|
||||
// field a = 2
|
||||
// bool a = true
|
||||
//
|
||||
// should fail
|
||||
|
||||
// let mut checker: Checker<Bn128Field> = Checker::default();
|
||||
// let _: Result<TypedStatement<Bn128Field>, Vec<ErrorInner>> = checker.check_statement(
|
||||
// Statement::Definition(
|
||||
// absy::Variable::immutable("a", UnresolvedType::FieldElement.mock()).mock(),
|
||||
// false,
|
||||
// )
|
||||
// .mock(),
|
||||
// &*MODULE_ID,
|
||||
// &TypeMap::new(),
|
||||
// );
|
||||
// let s2_checked: Result<TypedStatement<Bn128Field>, Vec<ErrorInner>> = checker
|
||||
// .check_statement(
|
||||
// Statement::Definition(
|
||||
// absy::Variable::immutable("a", UnresolvedType::Boolean.mock()).mock(),
|
||||
// false,
|
||||
// )
|
||||
// .mock(),
|
||||
// &*MODULE_ID,
|
||||
// &TypeMap::new(),
|
||||
// );
|
||||
// assert_eq!(
|
||||
// s2_checked,
|
||||
// Err(vec![ErrorInner {
|
||||
// pos: Some((Position::mock(), Position::mock())),
|
||||
// message: "Duplicate declaration for variable named a".into()
|
||||
// }])
|
||||
// );
|
||||
// }
|
||||
let mut checker: Checker<Bn128Field> = Checker::default();
|
||||
let _: Result<TypedStatement<Bn128Field>, Vec<ErrorInner>> = checker.check_statement(
|
||||
Statement::Definition(
|
||||
absy::Variable::immutable("a", UnresolvedType::FieldElement.mock()).mock(),
|
||||
absy::Expression::IntConstant(2usize.into()).mock(),
|
||||
)
|
||||
.mock(),
|
||||
&*MODULE_ID,
|
||||
&TypeMap::new(),
|
||||
);
|
||||
let s2_checked: Result<TypedStatement<Bn128Field>, Vec<ErrorInner>> = checker
|
||||
.check_statement(
|
||||
Statement::Definition(
|
||||
absy::Variable::immutable("a", UnresolvedType::Boolean.mock()).mock(),
|
||||
absy::Expression::BooleanConstant(true).mock(),
|
||||
)
|
||||
.mock(),
|
||||
&*MODULE_ID,
|
||||
&TypeMap::new(),
|
||||
);
|
||||
assert_eq!(
|
||||
s2_checked,
|
||||
Err(vec![ErrorInner {
|
||||
pos: Some((Position::mock(), Position::mock())),
|
||||
message: "Duplicate declaration for variable named a".into()
|
||||
}])
|
||||
);
|
||||
}
|
||||
|
||||
mod structs {
|
||||
use super::*;
|
||||
|
|
Loading…
Reference in a new issue