phase29ao(p43): add coreloop composer v0 scaffold
This commit is contained in:
@ -3,7 +3,7 @@
|
||||
## Current Focus
|
||||
|
||||
- Phase: `docs/development/current/main/phases/phase-29ao/README.md`
|
||||
- Next: `docs/development/current/main/phases/phase-29ao/P43-CORELOOPCOMPOSER-V0-SCAFFOLD-INSTRUCTIONS.md`
|
||||
- Next: TBD (see `docs/development/current/main/phases/phase-29ao/README.md`)
|
||||
|
||||
## Gate (SSOT)
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@ Scope: 「次にやる候補」を短く列挙するメモ。入口は `docs/dev
|
||||
|
||||
## Active
|
||||
|
||||
- CorePlan migration: `docs/development/current/main/phases/phase-29ao/README.md`(Next: P43)
|
||||
- CorePlan migration: `docs/development/current/main/phases/phase-29ao/README.md`(Next: TBD)
|
||||
|
||||
## Near-Term Candidates
|
||||
|
||||
|
||||
@ -34,7 +34,7 @@ Related:
|
||||
## 1.1 Current (active)
|
||||
|
||||
- Active phase: `docs/development/current/main/phases/phase-29ao/README.md`
|
||||
- Next step: `docs/development/current/main/phases/phase-29ao/P43-CORELOOPCOMPOSER-V0-SCAFFOLD-INSTRUCTIONS.md`
|
||||
- Next step: TBD
|
||||
|
||||
## 2. すでに固めた SSOT(再発防止の土台)
|
||||
|
||||
|
||||
@ -236,7 +236,11 @@ Gate(SSOT):
|
||||
- 指示書: `docs/development/current/main/phases/phase-29ao/P42-STAGE3-CORELOOPCOMPOSER-V0-DESIGN-INSTRUCTIONS.md`
|
||||
- ねらい: Skeleton+Feature 合成による CoreLoopComposer v0 の境界を SSOT で固定(docs-first, 仕様不変)
|
||||
|
||||
## P43: CoreLoopComposer v0 scaffold (unconnected) ✅
|
||||
|
||||
- 指示書: `docs/development/current/main/phases/phase-29ao/P43-CORELOOPCOMPOSER-V0-SCAFFOLD-INSTRUCTIONS.md`
|
||||
- ねらい: CoreLoopComposer v0 の足場を追加し、合成入口の SSOT を先に固定(未接続, 仕様不変)
|
||||
|
||||
## Next(planned)
|
||||
|
||||
- Next: P43(CoreLoopComposer v0 scaffold)
|
||||
- 指示書: `docs/development/current/main/phases/phase-29ao/P43-CORELOOPCOMPOSER-V0-SCAFFOLD-INSTRUCTIONS.md`
|
||||
- Next: TBD
|
||||
|
||||
78
src/mir/builder/control_flow/plan/composer/coreloop_v0.rs
Normal file
78
src/mir/builder/control_flow/plan/composer/coreloop_v0.rs
Normal 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());
|
||||
}
|
||||
}
|
||||
@ -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};
|
||||
|
||||
Reference in New Issue
Block a user