phase29an(p5): classify if-without-else as if2 skeleton
This commit is contained in:
@ -21,10 +21,7 @@ pub(in crate::mir::builder) fn try_extract_skeleton_facts_from_stmt(
|
||||
) -> Result<Option<SkeletonFacts>, Freeze> {
|
||||
let kind = match stmt {
|
||||
ASTNode::Loop { .. } => SkeletonKind::Loop,
|
||||
ASTNode::If {
|
||||
else_body: Some(_),
|
||||
..
|
||||
} => SkeletonKind::If2,
|
||||
ASTNode::If { .. } => SkeletonKind::If2,
|
||||
ASTNode::MatchExpr { .. } => SkeletonKind::BranchN,
|
||||
_ => return Ok(None),
|
||||
};
|
||||
@ -63,6 +60,66 @@ mod tests {
|
||||
assert_eq!(facts.kind, SkeletonKind::Loop);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn skeleton_facts_if_without_else_is_if2() {
|
||||
let if_node = ASTNode::If {
|
||||
condition: Box::new(ASTNode::Literal {
|
||||
value: LiteralValue::Bool(true),
|
||||
span: Span::unknown(),
|
||||
}),
|
||||
then_body: vec![],
|
||||
else_body: None,
|
||||
span: Span::unknown(),
|
||||
};
|
||||
let facts = try_extract_skeleton_facts_from_stmt(&if_node)
|
||||
.expect("Ok")
|
||||
.expect("Some");
|
||||
assert_eq!(facts.kind, SkeletonKind::If2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn skeleton_facts_if_with_else_is_if2() {
|
||||
let if_node = ASTNode::If {
|
||||
condition: Box::new(ASTNode::Literal {
|
||||
value: LiteralValue::Bool(true),
|
||||
span: Span::unknown(),
|
||||
}),
|
||||
then_body: vec![],
|
||||
else_body: Some(vec![]),
|
||||
span: Span::unknown(),
|
||||
};
|
||||
let facts = try_extract_skeleton_facts_from_stmt(&if_node)
|
||||
.expect("Ok")
|
||||
.expect("Some");
|
||||
assert_eq!(facts.kind, SkeletonKind::If2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn skeleton_facts_match_is_branchn() {
|
||||
let match_node = ASTNode::MatchExpr {
|
||||
scrutinee: Box::new(ASTNode::Literal {
|
||||
value: LiteralValue::Integer(1),
|
||||
span: Span::unknown(),
|
||||
}),
|
||||
arms: vec![(
|
||||
LiteralValue::Integer(1),
|
||||
ASTNode::Literal {
|
||||
value: LiteralValue::Integer(1),
|
||||
span: Span::unknown(),
|
||||
},
|
||||
)],
|
||||
else_expr: Box::new(ASTNode::Literal {
|
||||
value: LiteralValue::Integer(0),
|
||||
span: Span::unknown(),
|
||||
}),
|
||||
span: Span::unknown(),
|
||||
};
|
||||
let facts = try_extract_skeleton_facts_from_stmt(&match_node)
|
||||
.expect("Ok")
|
||||
.expect("Some");
|
||||
assert_eq!(facts.kind, SkeletonKind::BranchN);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn skeleton_facts_straight_line_is_none() {
|
||||
let assign = ASTNode::Assignment {
|
||||
|
||||
Reference in New Issue
Block a user