phase29ao(p43): add coreloop composer v0 scaffold

This commit is contained in:
2025-12-30 18:52:29 +09:00
parent 6d232cf6ed
commit 0201bf9156
6 changed files with 88 additions and 5 deletions

View File

@ -0,0 +1,78 @@
//! Phase 29ao P43: CoreLoopComposer v0 scaffold (unconnected).
use crate::mir::builder::control_flow::plan::facts::skeleton_facts::SkeletonKind;
use crate::mir::builder::control_flow::plan::normalize::CanonicalLoopFacts;
use crate::mir::builder::control_flow::plan::CorePlan;
#[allow(dead_code)]
pub(in crate::mir::builder) fn try_compose_core_loop_v0(
facts: &CanonicalLoopFacts,
) -> Result<Option<CorePlan>, String> {
if !matches!(facts.skeleton_kind, SkeletonKind::Loop) {
return Ok(None);
}
if facts.value_join_needed {
return Ok(None);
}
Ok(None)
}
#[cfg(test)]
mod tests {
use super::try_compose_core_loop_v0;
use crate::mir::builder::control_flow::plan::facts::feature_facts::{
LoopFeatureFacts, ValueJoinFacts,
};
use crate::mir::builder::control_flow::plan::facts::loop_facts::LoopFacts;
use crate::mir::builder::control_flow::plan::facts::scan_shapes::{
ConditionShape, StepShape,
};
use crate::mir::builder::control_flow::plan::facts::skeleton_facts::{
SkeletonFacts, SkeletonKind,
};
use crate::mir::builder::control_flow::plan::normalize::canonicalize_loop_facts;
fn base_facts(
skeleton_kind: SkeletonKind,
features: LoopFeatureFacts,
) -> LoopFacts {
LoopFacts {
condition_shape: ConditionShape::Unknown,
step_shape: StepShape::Unknown,
skeleton: SkeletonFacts {
kind: skeleton_kind,
},
features,
scan_with_init: None,
split_scan: None,
pattern1_simplewhile: None,
pattern3_ifphi: None,
pattern4_continue: None,
pattern5_infinite_early_exit: None,
pattern8_bool_predicate_scan: None,
pattern9_accum_const_loop: None,
pattern2_break: None,
pattern2_loopbodylocal: None,
}
}
#[test]
fn coreloop_v0_returns_none_for_non_loop_skeleton() {
let facts = base_facts(SkeletonKind::If2, LoopFeatureFacts::default());
let canonical = canonicalize_loop_facts(facts);
let composed = try_compose_core_loop_v0(&canonical).expect("Ok");
assert!(composed.is_none());
}
#[test]
fn coreloop_v0_returns_none_when_value_join_needed() {
let features = LoopFeatureFacts {
value_join: Some(ValueJoinFacts { needed: true }),
..LoopFeatureFacts::default()
};
let facts = base_facts(SkeletonKind::Loop, features);
let canonical = canonicalize_loop_facts(facts);
let composed = try_compose_core_loop_v0(&canonical).expect("Ok");
assert!(composed.is_none());
}
}

View File

@ -1,5 +1,6 @@
//! Phase 29ao P0: CorePlan composer scaffold (CanonicalLoopFacts -> CorePlan)
pub(super) mod coreloop_v0;
mod shadow_adopt;
use super::{normalizer::PlanNormalizer, CorePlan, DomainPlan, Pattern1SimpleWhilePlan};