feat(joinir): Phase 248 - Normalized JoinIR infrastructure
Major refactoring of JoinIR normalization pipeline: Key changes: - Structured→Normalized→MIR(direct) pipeline established - ShapeGuard enhanced with Pattern2 loop validation - dev_env.rs: New development fixtures and env control - fixtures.rs: jsonparser_parse_number_real fixture - normalized_bridge/direct.rs: Direct MIR generation from Normalized - pattern2_step_schedule.rs: Extracted step scheduling logic Files changed: - normalized.rs: Enhanced NormalizedJoinModule with DevEnv support - shape_guard.rs: Pattern2-specific validation (+300 lines) - normalized_bridge.rs: Unified bridge with direct path - loop_with_break_minimal.rs: Integrated step scheduling - Deleted: step_schedule.rs (moved to pattern2_step_schedule.rs) New files: - param_guess.rs: Loop parameter inference - pattern2_step_schedule.rs: Step scheduling for Pattern2 - phase43-norm-canon-p2-mid.md: Design doc Tests: 937/937 PASS (+6 from baseline 931) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -8,9 +8,11 @@ use crate::mir::join_ir::lowering::condition_env::{ConditionBinding, ConditionEn
|
||||
use crate::mir::join_ir::lowering::join_value_space::JoinValueSpace;
|
||||
use crate::mir::join_ir::lowering::loop_body_local_env::LoopBodyLocalEnv;
|
||||
use crate::mir::join_ir::lowering::loop_scope_shape::LoopScopeShape;
|
||||
use crate::mir::join_ir::lowering::loop_update_analyzer::UpdateExpr;
|
||||
use crate::mir::loop_pattern_detection::function_scope_capture::CapturedEnv;
|
||||
use crate::mir::loop_pattern_detection::error_messages;
|
||||
use crate::mir::ValueId;
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
fn log_pattern2(verbose: bool, tag: &str, message: impl AsRef<str>) {
|
||||
if verbose {
|
||||
@ -701,25 +703,19 @@ impl MirBuilder {
|
||||
verbose,
|
||||
"updates",
|
||||
format!(
|
||||
"Phase 176-3: Analyzed {} carrier updates",
|
||||
carrier_updates.len()
|
||||
),
|
||||
);
|
||||
"Phase 176-3: Analyzed {} carrier updates",
|
||||
carrier_updates.len()
|
||||
),
|
||||
);
|
||||
|
||||
let original_carrier_count = inputs.carrier_info.carriers.len();
|
||||
inputs.carrier_info.carriers.retain(|carrier| {
|
||||
use crate::mir::join_ir::lowering::carrier_info::{CarrierInit, CarrierRole};
|
||||
carrier_updates.contains_key(&carrier.name)
|
||||
|| carrier.role == CarrierRole::ConditionOnly
|
||||
|| carrier.init == CarrierInit::FromHost
|
||||
|| carrier.init == CarrierInit::LoopLocalZero
|
||||
});
|
||||
filter_carriers_for_updates(&mut inputs.carrier_info, &carrier_updates);
|
||||
|
||||
log_pattern2(
|
||||
verbose,
|
||||
"updates",
|
||||
format!(
|
||||
"Phase 176-4: Filtered carriers: {} → {} (kept only carriers with updates)",
|
||||
"Phase 176-4: Filtered carriers: {} → {} (kept only carriers with updates/condition-only/loop-local-zero)",
|
||||
original_carrier_count,
|
||||
inputs.carrier_info.carriers.len()
|
||||
),
|
||||
@ -858,6 +854,19 @@ impl MirBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
/// 更新を持たない FromHost キャリアを落とすヘルパー。
|
||||
fn filter_carriers_for_updates(
|
||||
carrier_info: &mut CarrierInfo,
|
||||
carrier_updates: &BTreeMap<String, UpdateExpr>,
|
||||
) {
|
||||
use crate::mir::join_ir::lowering::carrier_info::{CarrierInit, CarrierRole};
|
||||
carrier_info.carriers.retain(|carrier| {
|
||||
carrier_updates.contains_key(&carrier.name)
|
||||
|| carrier.role == CarrierRole::ConditionOnly
|
||||
|| carrier.init == CarrierInit::LoopLocalZero
|
||||
});
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
Reference in New Issue
Block a user