refactor(joinir): F-3 add _with_scope variant for skip_ws lowering
Phase 30 F-3: LoopScopeShape 実データ運用の一歩目 変更内容: - lower_case_a_skip_ws_with_scope(scope) 追加 - LoopScopeShape を直接受け取る新 API - CaseAContext::from_scope() 経由で ctx 構築 - lower_case_a_skip_ws_core(ctx) 抽出 - 共通ロジックを分離 - _for_minimal_skip_ws と _with_scope で共有 設計意図: - lowerer が scope を明示的に構築できる API を提供 - 将来の boxes 削除時に移行しやすい構造を準備 - 既存 API は後方互換性を維持 テスト結果: - JoinIR 関連テスト: 全 PASS - loop_scope_shape テスト: 10/10 PASS 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -9,6 +9,8 @@
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
use crate::mir::join_ir::lowering::loop_scope_shape::CaseAContext;
|
||||
// Phase 30: LoopScopeShape は将来の _with_scope API 追加時に再インポート
|
||||
// use crate::mir::join_ir::lowering::loop_scope_shape::LoopScopeShape;
|
||||
use crate::mir::join_ir::lowering::value_id_ranges;
|
||||
use crate::mir::join_ir::lowering::value_id_ranges::skip_ws as vid;
|
||||
use crate::mir::join_ir::lowering::value_id_ranges::stage1_using_resolver as stage1_vid;
|
||||
@ -52,7 +54,37 @@ pub fn lower_case_a_loop_to_joinir_for_minimal_skip_ws(
|
||||
|offset| vid::loop_step(offset),
|
||||
)?;
|
||||
|
||||
// JoinModule を手書き skip_ws と同じ形で構築(ValueId 範囲も揃える)
|
||||
// コア実装に委譲(Phase 30: _with_scope と共通化)
|
||||
lower_case_a_skip_ws_core(&ctx)
|
||||
}
|
||||
|
||||
/// Phase 30: LoopScopeShape を直接受け取る skip_ws lowerer
|
||||
///
|
||||
/// 呼び出し元で LoopScopeShape を明示的に構築し、この関数に渡す。
|
||||
/// CaseAContext::from_scope() 経由で ctx を作成。
|
||||
///
|
||||
/// # Arguments
|
||||
///
|
||||
/// - `scope`: 事前に構築済みの LoopScopeShape
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// Some(JoinModule) if successful, None if context building fails.
|
||||
pub(crate) fn lower_case_a_skip_ws_with_scope(
|
||||
scope: crate::mir::join_ir::lowering::loop_scope_shape::LoopScopeShape,
|
||||
) -> Option<JoinModule> {
|
||||
// CaseAContext::from_scope() で ctx を構築
|
||||
let ctx = CaseAContext::from_scope(scope, "skip_ws", |offset| vid::loop_step(offset))?;
|
||||
|
||||
// JoinModule 構築(既存 _for_minimal_skip_ws と同一ロジック)
|
||||
lower_case_a_skip_ws_core(&ctx)
|
||||
}
|
||||
|
||||
/// skip_ws JoinModule 構築のコア実装
|
||||
///
|
||||
/// CaseAContext から JoinModule を構築する共通ロジック。
|
||||
/// `_for_minimal_skip_ws` と `_with_scope` の両方から呼ばれる。
|
||||
fn lower_case_a_skip_ws_core(ctx: &CaseAContext) -> Option<JoinModule> {
|
||||
let string_key = ctx.pinned_name_or_first(0)?;
|
||||
let len_key = ctx.pinned_name_or_first(1).unwrap_or_else(|| string_key.clone());
|
||||
let index_key = ctx.carrier_name_or_first(0)?;
|
||||
@ -226,7 +258,7 @@ pub fn lower_case_a_loop_to_joinir_for_minimal_skip_ws(
|
||||
join_module.add_function(loop_step_func);
|
||||
|
||||
eprintln!(
|
||||
"[joinir/generic_case_a] ✅ constructed JoinIR (functions={}, value_range={}..{})",
|
||||
"[joinir/generic_case_a] ✅ constructed JoinIR via _core (functions={}, value_range={}..{})",
|
||||
join_module.functions.len(),
|
||||
value_id_ranges::base::SKIP_WS,
|
||||
value_id_ranges::base::SKIP_WS + 1999
|
||||
|
||||
Reference in New Issue
Block a user