phase29ao(p17): strict/dev adopt pattern1 skeleton
This commit is contained in:
@ -28,6 +28,7 @@ use crate::mir::loop_pattern_detection::{LoopFeatures, LoopPatternKind};
|
||||
use crate::mir::builder::control_flow::plan::lowerer::PlanLowerer;
|
||||
use crate::mir::builder::control_flow::plan::normalizer::PlanNormalizer;
|
||||
use crate::mir::builder::control_flow::plan::verifier::PlanVerifier;
|
||||
use crate::mir::builder::control_flow::plan::planner::{self, PlannerContext};
|
||||
use crate::mir::builder::control_flow::plan::single_planner;
|
||||
|
||||
/// AST Feature Extractor (declared in mod.rs as pub module, import from parent)
|
||||
@ -332,6 +333,38 @@ pub(crate) fn route_loop_pattern(
|
||||
|
||||
// Phase 29ai P5: Single entrypoint for plan extraction (router has no rule table).
|
||||
if let Some(domain_plan) = single_planner::try_build_domain_plan(ctx)? {
|
||||
let strict_or_dev = crate::config::env::joinir_dev::strict_enabled()
|
||||
|| crate::config::env::joinir_dev_enabled();
|
||||
|
||||
if strict_or_dev
|
||||
&& matches!(
|
||||
domain_plan,
|
||||
crate::mir::builder::control_flow::plan::DomainPlan::Pattern1SimpleWhile(_)
|
||||
)
|
||||
{
|
||||
let planner_ctx = PlannerContext {
|
||||
pattern_kind: Some(ctx.pattern_kind),
|
||||
in_static_box: ctx.in_static_box,
|
||||
debug: ctx.debug,
|
||||
};
|
||||
let outcome = planner::build_plan_with_facts_ctx(&planner_ctx, ctx.condition, ctx.body)
|
||||
.map_err(|freeze| freeze.to_string())?;
|
||||
let facts = outcome
|
||||
.facts
|
||||
.as_ref()
|
||||
.ok_or_else(|| "pattern1 strict/dev adopt failed: facts missing".to_string())?;
|
||||
if facts.facts.pattern1_simplewhile.is_none() {
|
||||
return Err("pattern1 strict/dev adopt failed: facts mismatch".to_string());
|
||||
}
|
||||
let core_plan =
|
||||
PlanNormalizer::normalize_loop_skeleton_from_facts(builder, facts, ctx)?
|
||||
.ok_or_else(|| {
|
||||
"pattern1 strict/dev adopt failed: skeleton compose rejected".to_string()
|
||||
})?;
|
||||
PlanVerifier::verify(&core_plan)?;
|
||||
return PlanLowerer::lower(builder, core_plan, ctx);
|
||||
}
|
||||
|
||||
return lower_via_plan(builder, domain_plan, ctx);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user