update tests
This commit is contained in:
parent
e2878f19a3
commit
de6bf42362
4 changed files with 52 additions and 62 deletions
|
@ -0,0 +1,3 @@
|
|||
def main():
|
||||
field[2] a[2] = [1, 2] // only variables can be declared in such a statement, declaring `a[2]` is invalid
|
||||
return
|
|
@ -255,11 +255,14 @@ fn statements_from_definition(definition: pest::DefinitionStatement) -> Vec<absy
|
|||
vec![absy::AssigneeNode::from(i.identifier.clone())],
|
||||
e,
|
||||
),
|
||||
_ => absy::Statement::Definition(absy::AssigneeNode::from(i.identifier.clone()), e),
|
||||
_ => absy::Statement::Definition(
|
||||
absy::AssigneeNode::from(i.identifier.clone()),
|
||||
e,
|
||||
),
|
||||
};
|
||||
|
||||
vec![declaration, s.span(definition.span)]
|
||||
},
|
||||
}
|
||||
pest::TypedIdentifierOrAssignee::Assignee(a) => {
|
||||
let s = match e.value {
|
||||
absy::Expression::FunctionCall(..) => absy::Statement::MultipleDefinition(
|
||||
|
@ -279,28 +282,29 @@ fn statements_from_definition(definition: pest::DefinitionStatement) -> Vec<absy
|
|||
pest::TypedIdentifierOrAssignee::TypedIdentifier(i) => {
|
||||
let ty = i.ty;
|
||||
let id = i.identifier;
|
||||
|
||||
Some(absy::Statement::Declaration(
|
||||
absy::Variable::new(
|
||||
id.span.as_str(),
|
||||
absy::UnresolvedTypeNode::from(ty),
|
||||
|
||||
Some(
|
||||
absy::Statement::Declaration(
|
||||
absy::Variable::new(
|
||||
id.span.as_str(),
|
||||
absy::UnresolvedTypeNode::from(ty),
|
||||
)
|
||||
.span(id.span),
|
||||
)
|
||||
.span(id.span),
|
||||
.span(i.span),
|
||||
)
|
||||
.span(i.span))
|
||||
},
|
||||
_ => None
|
||||
}
|
||||
_ => None,
|
||||
});
|
||||
|
||||
let lhs = lhs
|
||||
.into_iter()
|
||||
.map(|i| match i {
|
||||
pest::TypedIdentifierOrAssignee::TypedIdentifier(i) => {
|
||||
absy::Assignee::Identifier(i.identifier.span.as_str()).span(i.identifier.span)
|
||||
},
|
||||
pest::TypedIdentifierOrAssignee::Assignee(a) => {
|
||||
absy::AssigneeNode::from(a)
|
||||
absy::Assignee::Identifier(i.identifier.span.as_str())
|
||||
.span(i.identifier.span)
|
||||
}
|
||||
pest::TypedIdentifierOrAssignee::Assignee(a) => absy::AssigneeNode::from(a),
|
||||
})
|
||||
.collect();
|
||||
|
||||
|
@ -1111,18 +1115,14 @@ mod tests {
|
|||
// A `Definition` is generated and no `Declaration`s
|
||||
|
||||
let definition = pest::DefinitionStatement {
|
||||
lhs: vec![pest::OptionallyTypedAssignee {
|
||||
ty: None,
|
||||
a: pest::Assignee {
|
||||
id: pest::IdentifierExpression {
|
||||
value: String::from("a"),
|
||||
span: span.clone(),
|
||||
},
|
||||
accesses: vec![],
|
||||
lhs: vec![pest::TypedIdentifierOrAssignee::Assignee(pest::Assignee {
|
||||
id: pest::IdentifierExpression {
|
||||
value: String::from("a"),
|
||||
span: span.clone(),
|
||||
},
|
||||
accesses: vec![],
|
||||
span: span.clone(),
|
||||
}],
|
||||
})],
|
||||
expression: pest::Expression::Literal(pest::LiteralExpression::DecimalLiteral(
|
||||
pest::DecimalLiteralExpression {
|
||||
value: pest::DecimalNumber {
|
||||
|
@ -1149,18 +1149,14 @@ mod tests {
|
|||
// A MultiDef is generated
|
||||
|
||||
let definition = pest::DefinitionStatement {
|
||||
lhs: vec![pest::OptionallyTypedAssignee {
|
||||
ty: None,
|
||||
a: pest::Assignee {
|
||||
id: pest::IdentifierExpression {
|
||||
value: String::from("a"),
|
||||
span: span.clone(),
|
||||
},
|
||||
accesses: vec![],
|
||||
lhs: vec![pest::TypedIdentifierOrAssignee::Assignee(pest::Assignee {
|
||||
id: pest::IdentifierExpression {
|
||||
value: String::from("a"),
|
||||
span: span.clone(),
|
||||
},
|
||||
accesses: vec![],
|
||||
span: span.clone(),
|
||||
}],
|
||||
})],
|
||||
expression: pest::Expression::Postfix(pest::PostfixExpression {
|
||||
id: pest::IdentifierExpression {
|
||||
value: String::from("foo"),
|
||||
|
@ -1195,32 +1191,24 @@ mod tests {
|
|||
|
||||
let definition = pest::DefinitionStatement {
|
||||
lhs: vec![
|
||||
pest::OptionallyTypedAssignee {
|
||||
ty: Some(pest::Type::Basic(pest::BasicType::Field(pest::FieldType {
|
||||
pest::TypedIdentifierOrAssignee::TypedIdentifier(pest::TypedIdentifier {
|
||||
ty: pest::Type::Basic(pest::BasicType::Field(pest::FieldType {
|
||||
span: span.clone(),
|
||||
}))),
|
||||
a: pest::Assignee {
|
||||
id: pest::IdentifierExpression {
|
||||
value: String::from("a"),
|
||||
span: span.clone(),
|
||||
},
|
||||
accesses: vec![],
|
||||
})),
|
||||
identifier: pest::IdentifierExpression {
|
||||
value: String::from("a"),
|
||||
span: span.clone(),
|
||||
},
|
||||
span: span.clone(),
|
||||
},
|
||||
pest::OptionallyTypedAssignee {
|
||||
ty: None,
|
||||
a: pest::Assignee {
|
||||
id: pest::IdentifierExpression {
|
||||
value: String::from("b"),
|
||||
span: span.clone(),
|
||||
},
|
||||
accesses: vec![],
|
||||
}),
|
||||
pest::TypedIdentifierOrAssignee::Assignee(pest::Assignee {
|
||||
id: pest::IdentifierExpression {
|
||||
value: String::from("b"),
|
||||
span: span.clone(),
|
||||
},
|
||||
accesses: vec![],
|
||||
span: span.clone(),
|
||||
},
|
||||
}),
|
||||
],
|
||||
expression: pest::Expression::Postfix(pest::PostfixExpression {
|
||||
id: pest::IdentifierExpression {
|
||||
|
|
|
@ -1484,7 +1484,6 @@ impl<'ast, T: Field> Checker<'ast, T> {
|
|||
res
|
||||
}
|
||||
Statement::MultipleDefinition(assignees, rhs) => {
|
||||
|
||||
println!("ASSIGNEES: {:?}", assignees);
|
||||
|
||||
match rhs.value {
|
||||
|
|
|
@ -14,11 +14,11 @@ pub use ast::{
|
|||
DecimalSuffix, DefinitionStatement, ExplicitGenerics, Expression, FieldType, File,
|
||||
FromExpression, FunctionDefinition, HexLiteralExpression, HexNumberExpression,
|
||||
IdentifierExpression, ImportDirective, ImportSource, ImportSymbol, InlineArrayExpression,
|
||||
InlineStructExpression, InlineStructMember, IterationStatement, LiteralExpression,
|
||||
TypedIdentifierOrAssignee, Parameter, PostfixExpression, Range, RangeOrExpression,
|
||||
ReturnStatement, Span, Spread, SpreadOrExpression, Statement, StructDefinition, StructField,
|
||||
SymbolDeclaration, TernaryExpression, ToExpression, Type, UnaryExpression, UnaryOperator,
|
||||
Underscore, Visibility,
|
||||
InlineStructExpression, InlineStructMember, IterationStatement, LiteralExpression, Parameter,
|
||||
PostfixExpression, Range, RangeOrExpression, ReturnStatement, Span, Spread, SpreadOrExpression,
|
||||
Statement, StructDefinition, StructField, SymbolDeclaration, TernaryExpression, ToExpression,
|
||||
Type, TypedIdentifier, TypedIdentifierOrAssignee, UnaryExpression, UnaryOperator, Underscore,
|
||||
Visibility,
|
||||
};
|
||||
|
||||
mod ast {
|
||||
|
@ -638,7 +638,7 @@ mod ast {
|
|||
#[pest_ast(rule(Rule::typed_identifier_or_assignee))]
|
||||
pub enum TypedIdentifierOrAssignee<'ast> {
|
||||
Assignee(Assignee<'ast>),
|
||||
TypedIdentifier(TypedIdentifier<'ast>)
|
||||
TypedIdentifier(TypedIdentifier<'ast>),
|
||||
}
|
||||
|
||||
#[derive(Debug, FromPest, PartialEq, Clone)]
|
||||
|
@ -1342,9 +1342,9 @@ mod tests {
|
|||
span: Span::new(&source, 23, 28).unwrap()
|
||||
})),
|
||||
identifier: IdentifierExpression {
|
||||
value: String::from("a"),
|
||||
span: Span::new(&source, 29, 30).unwrap(),
|
||||
},
|
||||
value: String::from("a"),
|
||||
span: Span::new(&source, 29, 30).unwrap(),
|
||||
},
|
||||
span: Span::new(&source, 23, 30).unwrap()
|
||||
}),
|
||||
TypedIdentifierOrAssignee::Assignee(Assignee {
|
||||
|
|
Loading…
Reference in a new issue