Commit Graph

54 Commits

Author SHA1 Message Date
2da730de35 refactor(cleanup): Phase 285A1 Post-Implementation Cleanup
Code quality improvements after Phase 285A1 implementation:

**Task 1: Dead Code Cleanup**
- Removed unnecessary #[allow(dead_code)] from emit_weak_load()
- Function is actively used in weak_to_strong() method handler

**Task 2: Unused Import Removal (cargo fix)**
- edgecfg/api/mod.rs: Removed seq, if_, loop_, cleanup, verify_frag_invariants
- pattern3.rs: Removed BinaryOperator
- pattern2/api/mod.rs: Removed PromoteStepResult
- jump.rs: Removed EffectMask, Span
- Result: 6 unused imports eliminated

**Task 3: Deprecated Pattern Removal**
- Fixed 4 PlanKind::LoopWithPost deprecated warnings
- Updated to Phase 142 P0 architecture (statement-level normalization)
- Files: normalized_shadow_suffix_router_box.rs, routing.rs,
  execute_box.rs, plan.rs
- Removed 2 deprecated tests: test_loop_with_post_*

**Task 4: WeakFieldValidatorBox Boxification**
- Extracted weak field validation logic into dedicated Box
- New file: src/mir/builder/weak_field_validator.rs (147 lines)
- fields.rs: 277 → 237 lines (-40 lines, -14.4%)
- Added 5 unit tests for validation logic
- Follows Phase 33 boxification principles (single responsibility,
  testability, reusability)

**Metrics**:
- Code reduction: -40 lines in fields.rs
- Test coverage: +5 unit tests
- Warnings fixed: 4 deprecated warnings
- Imports cleaned: 6 unused imports

🤖 Generated with Claude Code

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-24 03:44:56 +09:00
a744be929a feat(edgecfg): Phase 281 P3 - cleanup Normal wiring + docs 2025-12-23 04:11:02 +09:00
1b7fd7a0ff refactor(plan): Phase 273 P3+ - Legacy code removal
Phase 273 P3+ 完成: レガシーコード削除 + 未使用 import 整理

Removed Legacy Items:
1. emit_scan_with_init_edgecfg() - Pattern6 固有の emission 関数
   - File deleted: src/mir/builder/emission/loop_scan_with_init.rs (~144 lines)
   - Replaced by: generalized Frag API (Phase 273 P2)

2. CoreCarrierInfo struct - Legacy carrier representation
   - Removed from: src/mir/builder/control_flow/plan/mod.rs (~15 lines)
   - Replaced by: CorePhiInfo (generalized PHI representation)

3. verify_carrier() function - CoreCarrierInfo validator
   - Removed from: src/mir/builder/control_flow/plan/verifier.rs (~15 lines)
   - Replaced by: generalized PHI verification (V7-V9)

Code Cleanup:
- cargo fix applied: unused imports removed (~30 files)
- Verifier invariants updated: V1→V2-V9 (carrier→PHI model)
- Module declaration cleanup in emission/mod.rs

Impact:
- Total lines removed: ~174 lines (net reduction)
- Pattern-agnostic architecture strengthened
- All legacy Pattern6 references eliminated

Tests:
-  VM tests PASS (phase254/256/258)
-  LLVM tests PASS (phase256/258)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 00:11:20 +09:00
f07c2e7874 feat(mir): Phase 279 P0 - Type propagation pipeline SSOT unification
Eliminate "2本のコンパイラ" problem by unifying type propagation into single SSOT entry.

SSOT implementation:
- src/mir/type_propagation/pipeline.rs - SSOT type propagation pipeline
- TypePropagationPipeline::run() - Single entry point for all routes

Pipeline steps (fixed order):
1. Copy propagation (initial)
2. BinOp re-propagation (numeric promotion: Int+Float→Float)
3. Copy propagation (propagate promoted types)
4. PHI type inference (private step - cannot bypass)

Callers (both routes now use SSOT):
- lifecycle.rs::finalize_module() - Builder lifecycle route
- joinir_function_converter.rs::propagate_types() - JoinIR bridge route

Fail-fast guard (structural guarantee):
- PHI type inference is private step inside TypePropagationPipeline
- lifecycle.rs and joinir_function_converter.rs cannot call PhiTypeResolver directly
- Only public API: TypePropagationPipeline::run()
- Order drift is structurally impossible (private encapsulation)

Code reduction:
- ~500 lines of duplicate BinOp re-propagation logic removed
- 2 implementations consolidated into 1 SSOT

Files changed:
- New: src/mir/type_propagation/mod.rs
- New: src/mir/type_propagation/pipeline.rs (~300 lines)
- Modified: src/mir/mod.rs
- Modified: src/mir/builder/lifecycle.rs (~400 lines removed)
- Modified: src/mir/join_ir_vm_bridge/joinir_function_converter.rs (~100 lines removed)

Regression testing:
 Lifecycle route (VM backend): Phase 275 fixture
 JoinIR route (VM backend): loop_min_while.hako
 LLVM harness: Phase 275 fixture

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 15:34:03 +09:00
60cffb1948 feat(phase275-p0): Float型PHI完全対応 - MIR型伝播→LLVM IR生成
Phase 275 P0: Float型PHIノードの完全実装

【問題】
- PHI v36 が i64 型で生成されるが、incoming value v12 が f64 型
- LLVM IR parsing error: 型不一致により実行失敗

【解決】
1. MIR型伝播順序修正 (lifecycle.rs)
   - BinOp repropagation → PHI resolution に変更
   - Int+Float → Float promotion を PHI推論前に実行

2. MIR JSON Float型出力 (mir_json_emit.rs)
   - PHI dst_type に Float case 追加(2箇所)

3. LLVM PHI型対応 (wiring.py, tagging.py, llvm_builder.py)
   - ensure_phi に dst_type パラメータ追加
   - f64 の場合 ir.DoubleType() PHI 生成
   - 型互換性チェック付き predeclared PHI 再利用

4. LLVM Float演算対応
   - compare.py: ensure_double helper (Float unboxing for fcmp)
   - binop.py: Int+Float → sitofp→fadd (unboxed double)

【検証】
- LLVM IR: phi double [%"float_int_add", %"bb0"] 
- VM/LLVM parity: exit=3 
- PHI duplicate 解消: 型チェックで再利用 

【影響範囲】
- Rust MIR builder: 3ファイル (型伝播ロジック)
- LLVM harness: 5ファイル (PHI型対応)
- Kernel: 1ファイル (box_from_f64 helper - 予備)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 13:31:53 +09:00
f071b4cc3c refactor(joinir): Eliminate call instruction generation duplication
Problem:
- 3 duplicate call instruction patterns
- Lines ~404-417 (handle_call non-tail)
- Lines ~506-518 (exit block tail call)
- Lines ~530-540 (unconditional jump tail call)

Solution:
- Use existing call_generator.rs helpers
- emit_call_pair() for current_instructions (no separate spans)
- emit_call_pair_with_spans() for BasicBlock with spans

Result:
-  ~15 lines eliminated (3 duplicate patterns removed)
-  Tests pass, no regression
-  Cleaner handle_jump implementation

🤖 Generated with Claude Code

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 04:15:37 +09:00
f7437957b7 refactor(joinir): Eliminate merge variable copy duplication
Problem:
- 4 duplicate merge variable copy patterns
- Lines ~652-660, 667-675, 785-791, 800-806

Solution:
- Use existing merge_variable_handler.rs
- Unified merge copy emission with emit_merge_copies()
- MergeBranch enum (Then/Else) for branch selection

Result:
-  ~20 lines eliminated (4 duplicate loops removed)
-  Tests pass, no regression
-  Cleaner handle_select implementation

🤖 Generated with Claude Code

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 04:12:52 +09:00
3cdeb95cbc refactor(joinir): Eliminate block allocation duplication with BlockAllocator
Problem:
- joinir_block_converter.rs had 4 duplicate block allocation patterns
- Lines 260-265, 487-489, 635-639, 740-748 all manually allocating BasicBlockIds
- Total duplication: 27 lines across 4 sites

Solution:
- Use existing BlockAllocator (Phase 260 P0.2) for all block allocations
- Replace manual patterns with allocate_two(), allocate_three(), allocate_n()

Changes:
- Site 1/4 (handle_conditional_method_call): 6 lines → 3 lines (-3)
- Site 2/4 (handle_jump): 4 lines → 3 lines (-1)
- Site 3/4 (handle_if_merge): 6 lines → 3 lines (-3)
- Site 4/4 (handle_nested_if_merge): 11 lines → 8 lines (-3)

Result:
-  10 lines eliminated
-  Improved readability (clear intent)
-  Improved maintainability (SSOT for allocation)
-  No behavior change (all tests pass)
-  No regression: phase269_p1_2, phase259_p0, phase269_p0 PASS

Follow-up potential:
- MergeVariableHandlerBox duplication (lines 652-660, 667-675, 785-791, 800-806)
- CallInstructionGeneratorBox duplication (lines 403-406, 511-514, 536-546)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 03:58:12 +09:00
45a7e24f7d feat(mir): Phase 260 P2 - Delete BasicBlock.jump_args, unify to terminator SSOT
- Delete legacy jump_args/jump_args_layout fields from BasicBlock
- Add return_env/return_env_layout for Return-specific metadata
- Rename set_return_edge_args() → set_return_env() (clearer semantics)
- Remove 8 legacy helper methods (has/get/set/clear legacy_jump_args)
- Simplify set_jump/branch_with_edge_args (remove legacy sync, keep API)
- Update edge_args_from_terminator() to terminator-only (no fallback)
- Update 10+ JoinIR handler/test sites to use new API

This completes Phase 260 P0 → P2 migration: edge-args are now
exclusively in terminator operands (Jump/Branch) or Return-specific
metadata (renamed from legacy terminology).

BREAKING: BasicBlock.jump_args field removed. Use terminator edge-args
or block.return_env() for Return blocks.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 09:39:20 +09:00
2f2596db37 refactor(mir): phase261 p0.1 unify return edge-args writes 2025-12-21 08:40:34 +09:00
2c01a7335a refactor(joinir): Phase 260 P0.3 Phase 2 - extract 5 complex handlers
Extracts all remaining complex handlers from joinir_block_converter.rs:

**handlers/call.rs** (308 lines):
- handle_call() - Call + tail call processing
- Phase 131 P2: Stable function name ValueId (module-global SSOT)
- Phase 131 P2: Legacy jump-args metadata for tail calls
- Phase 256 P1.8: Function name resolution
- 5 comprehensive unit tests

**handlers/jump.rs** (566 lines):
- handle_jump() - Jump to continuation (conditional/unconditional)
- get_continuation_name() helper (Phase 256 P1.9)
- Stable ValueId allocation (JUMP_FUNC_NAME_ID_BASE = 91000)
- Phase 246-EX: Legacy jump-args metadata
- 5 comprehensive unit tests

**handlers/conditional_method_call.rs** (413 lines):
- handle_conditional_method_call() - If/Phi expansion (single variable)
- 3-block pattern: cond → then (BoxCall) / else (Copy) → merge (PHI)
- Uses block_allocator + terminator_builder
- 4 comprehensive unit tests

**handlers/if_merge.rs** (454 lines):
- handle_if_merge() - If/Phi with multiple variables
- Handles parallel merges (e.g., sum + count in fold operations)
- Uses merge_variable_handler for copy emission
- 4 comprehensive unit tests

**handlers/nested_if_merge.rs** (557 lines):
- handle_nested_if_merge() - Multi-level nested branches (MOST COMPLEX)
- Dynamic N+3 block allocation (N levels + then + final_else + merge)
- Cascading AND logic for N conditions
- 4 comprehensive unit tests

All handlers:
- Use extracted utilities (block_allocator, call_generator, merge_variable_handler, terminator_builder, block_finalizer)
- Accept finalize_fn as parameter (enables testing)
- Fully tested (22 unit tests total, all passing)
- Ready for integration into converter

Pattern reduction: ~581 lines of complex control flow → 5 focused modules

Phase 2 complete - all handlers extracted and tested.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 08:08:25 +09:00
e7f9adcfed refactor(joinir): Phase 260 P0.3 Phase 1 - extract terminator_builder + block_finalizer
Extracts shared utilities from joinir_block_converter.rs to prepare for
handler extraction (Phase 2):

**terminator_builder.rs** (207 lines):
- create_branch_terminator() - Branch with empty edge_args
- emit_branch_and_finalize() - Branch + block finalization
- create_jump_terminator() - Jump with empty edge_args
- create_return_terminator() - Return terminator
- Eliminates 4x Branch terminator duplication

**block_finalizer.rs** (246 lines):
- finalize_block() - Add instructions + terminator (PHI-preserving)
- finalize_remaining_instructions() - Flush pending instructions
- Phase 189 FIX: Critical PHI preservation logic
- PHI instructions remain at block start for SSA correctness

Pattern reduction: ~90 lines duplicated 4x → 2 utility modules

All utilities fully tested with comprehensive unit tests.
Phase 1 complete - utilities ready for Phase 2 handler extraction.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 07:40:05 +09:00
666de9d3ec refactor(joinir): Phase 260 P0.2 - extract select handler
Adds select handler to the handlers/ module:

**handlers/select.rs** (118 lines):
- handle_select() - Select instruction (Phase 256 P1.5)
- Direct instruction emission (no branch/PHI expansion)
- Debug logging support
- Comprehensive unit tests

Pattern: Simple instruction wrapper, no control flow complexity

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 07:27:18 +09:00
875bfee1ba refactor(joinir): Phase 260 P0.2 - extract call_generator + 4 simple handlers
Extracts repeated patterns from joinir_block_converter.rs:

**call_generator.rs** (195 lines):
- emit_call_pair() - Const + Call instruction pair generation
- emit_call_pair_with_spans() - With span tracking
- Eliminates 3x duplication of call generation pattern

**handlers/** module (4 simple handlers, 389 lines total):
- ret.rs - Return instruction handling
- method_call.rs - MethodCall → BoxCall conversion
- field_access.rs - FieldAccess → BoxCall (getter pattern)
- new_box.rs - NewBox instruction handling

All handlers fully tested with comprehensive unit tests.

Pattern reduction: ~60 lines duplicated 3x → single utility modules

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 07:22:14 +09:00
84cd653aef refactor(joinir): Phase 260 P0.2 - extract merge_variable_handler.rs
Extracts merge copy emission pattern from joinir_block_converter.rs to
eliminate 4x code duplication:

- MergeBranch enum (Then/Else) for branch selection
- emit_merge_copies() for MergePair-based copy emission
- emit_copy_instructions() for direct ValueId pair emission
- Comprehensive unit tests for all patterns

Pattern reduction: ~20 lines duplicated 4x → single 60-line module

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 07:07:21 +09:00
c2e8099ff6 refactor(joinir): Phase 260 P0.2 - extract block_allocator.rs
Extract block ID allocation pattern from joinir_block_converter.rs into
dedicated block_allocator.rs module (~130 lines).

New BlockAllocator struct provides:
- allocate_one(): Single block ID
- allocate_two(): Pair (exit + continue pattern)
- allocate_three(): Triple (then + else + merge pattern)
- allocate_n(): N block IDs for nested structures
- 5 unit tests

This eliminates 4x repeated allocation pattern across:
- handle_conditional_method_call() lines 259-265
- handle_jump() lines 484-487
- handle_if_merge() lines 630-635
- handle_nested_if_merge() lines 731-744

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 06:57:16 +09:00
8fa7e64f24 docs(phase260): checkpoint P0/P0.1 + update quick first fail 2025-12-21 05:54:00 +09:00
1fe5be347d refactor(mir): phase260 p0.1 strangler hardening + smoke fixtures 2025-12-21 05:47:37 +09:00
4dfe3349bf refactor(mir): phase260 p0 edge-args plumbing (strangler) + ssot api + docs 2025-12-21 04:34:22 +09:00
4439d64da3 refactor(joinir): make jump_args layout explicit (Phase 256) 2025-12-20 13:04:24 +09:00
1028bd419c fix(joinir): stabilize Phase 256 merge (jump_args, DCE, func names) 2025-12-20 11:01:48 +09:00
3d09302832 fix(joinir): guard bridge meta debug logs 2025-12-20 06:36:16 +09:00
bfd324d7b9 feat(joinir): Phase 256 P1.5 - JoinInst::Select 命令サポート(根治)
## 変更内容

Task 1(既完了): boundary パラメータを bridge 経路全体に伝播
- conversion_pipeline.rs, bridge.rs(複数箇所), meta.rs, routing_legacy_binding.rs, execute_box.rs

Task 2-A~2-D: Select 命令の実装
- 2-A: MirInstruction::Select バリアント追加
- 2-B: JoinIR Select → MIR Select 直接変換(branch+phi展開廃止)
- 2-C:  joinir_id_remapper に Select remap case(ValueId変換の根治)
- 2-D: value_collector に Select case

## 根本原因解決

Pattern7 の JoinInst::Select が JoinIR→MIR で未対応
→ ValueId(1002) → ValueId(57) のリマップが行われず
→ "use of undefined value ValueId(57)" エラー

## 現在地

 cargo check: 0 errors
 Pattern7/6 VM test(Task 2-E LLVM実装後)

🧠 Generated with Claude Code
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2025-12-20 03:11:58 +09:00
149e30cae5 fix(joinir): Phase 132 P1 - k_exit continuation classification fix
Problem: k_exit with TailCall(post_k) was classified as skippable continuation,
causing post_k block to become unreachable.

Root cause:
- Continuation classification was name-based ("join_func_2")
- Skippable continuation check didn't examine function body
- k_exit with tail call to post_k had its block skipped during merge

Solution:
- Check function body structure before classifying as skippable
- Non-skippable pattern: continuation with TailCall to another function
- Properly emit tail call as Jump instruction

Changes:
- src/mir/builder/control_flow/joinir/merge/mod.rs:
  - Add structural check in is_skippable_continuation()
  - Detect TailCall(other_func) pattern
  - Skip only if function is truly empty (1 block, Return only)

- src/mir/builder/control_flow/joinir/merge/instruction_rewriter.rs:
  - Improve k_exit continuation handling
  - Properly rewrite TailCall → Jump for post_k

Test results:
- Phase 132 LLVM EXE: PASS (exit code 3)
- Phase 132 VM: PASS
- Phase 131 regression: PASS
- Phase 97 regression: PASS

Related: Phase 132 loop(true) + post-loop VM/LLVM parity

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 21:51:52 +09:00
02c4c313e5 feat(control_tree): Phase 131 P1.5-P2 DirectValue exit reconnection
Implement DirectValue mode for Normalized shadow exit handling:

**P1.5 Changes**:
- Add ExitReconnectMode::DirectValue (skip exit PHI generation)
- Carry remapped_exit_values through merge result
- Update host variable_map directly with exit values
- Fix loop(true) { x = 1; break }; return x to return 1 correctly

**P2 Changes**:
- Normalize k_exit continuation entry/exit edges
- Rewrite TailCall(k_exit) → Jump(exit_block) for proper merge
- Add verify_all_terminator_targets_exist contract check
- Extend ExitLineReconnector to handle DirectValue mode

**Infrastructure**:
- tools/build_llvm.sh: Force TMPDIR under target/ (EXDEV mitigation)
- llvm_exe_runner.sh: Add exit_code verification support
- Phase 131 smokes: Update for dev-only + exit code validation

**Contracts**:
- PHI-free: Normalized path uses continuations only
- Exit values reconnect via remapped ValueIds
- Existing patterns unaffected (既定挙動不変)

Related: Phase 131 loop(true) break-once Normalized support

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 17:48:05 +09:00
e404746612 refactor(mir): Phase 139-P3-B - RoutingDecision を enum 対応 + レガシー削除
- RoutingDecision の missing_caps を Vec<CapabilityTag> に変更(型安全化)
- error_tags は to_tag() メソッドで自動生成
- 全 callsite を enum variant に修正
- capability_tags モジュール(文字列定数群)を完全削除
- 全テスト PASS(型安全性向上を確認)
- フォーマット適用
2025-12-16 07:02:14 +09:00
45add0f5d3 feat(joinir): Phase 90 P0 - ParseStringComposite pattern
## Composite Pattern
- Continue(escape i+=2) + EarlyReturn(close quote)
- parse_string_composite_pattern.rs (50行、continue_return 再利用)
- 89% コード削減(450行→50行)

## Shape Detection
- BinOp Add const 2 検出(escape 特徴)
- LoopStepInspector 活用(Phase 89 リファクタ成果)

## SSOT Integration
- dev_fixtures.rs に登録
- StepCalculator 再利用(Phase 89-2 成果)

## Tests
- +2 tests (vm_bridge + 期待値 n=10→acc=5)
- normalized_dev: 61→63 passed
- lib: 993 passed (回帰なし)

Impact:
- Reuse over Duplication 実践
- Phase 89 リファクタ成果の完全活用
- 箱化原則 5/5 遵守

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-14 03:36:45 +09:00
4e3fc4ad49 feat(joinir): Phase 89 P0 - Continue + Early Return pattern detector
## Pattern4 Detector 締め
- is_pattern4_continue_minimal() を厳しく
- Select 必須 + conditional Jump exactly 1
- loop 内 return を P4 と誤認しない

## 新パターン箱
- LoopPattern::ContinueReturn enum 追加
- has_return_in_loop_body() helper 追加
- Fail-Fast: UnimplementedPattern error

## Normalized-dev 統合
- NormalizedDevShape::PatternContinueReturnMinimal
- detector: Select + conditional Jumps >= 2
- canonical には入れない(dev-only)

## Documentation
- 10-Now.md, CURRENT_TASK.md 更新

Impact:
- 987 lib tests PASS
- 60 normalized_dev tests PASS
- Pattern4 誤爆防止

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-14 00:59:58 +09:00
80e952b83a feat(joinir): Phase 54 SELFHOST-SHAPE-GROWTH - 構造軸育成 + 偽陽性観測
Phase 53 成果を踏まえ、構造シグネチャ軸を 5+ に育て、
偽陽性観測テストで name ガード縮小準備を整えた。

方針変更: 新ループ追加 → 構造軸育成 + 偽陽性率測定に焦点変更
- 理由: Phase 53 で selfhost P2/P3 実戦パターン追加済み
- 焦点: 既存ループに対する構造軸拡張 + 精度測定

主な成果:

1. 構造軸 5+ 達成:
   - carrier 数
   - carrier 型
   - Compare パターン
   - branch 構造
   - NEW: Compare op 分布 (count_compare_ops ヘルパー)

2. 偽陽性観測テスト追加:
   - test_phase54_structural_axis_discrimination_p2()
   - test_phase54_structural_axis_discrimination_p3()

3. 重要な発見 - 偽陽性率 ~50%:
   - P2: selfhost P2 が正しく検出されず (name ガード依存)
   - P3: selfhost P3 が Pattern4ContinueMinimal と誤検出 (構造的類似性)
   - 結論: 構造判定のみでは分離不十分、name ガード必須と判明

変更内容:

- shape_guard.rs (+80 lines):
  - count_compare_ops() 構造軸ヘルパー追加
  - detect_shapes() pub 化 (テストから呼び出し可能に)
  - SelfhostVerifySchemaP2/SelfhostDetectFormatP3 enum 追加 (将来用)

- normalized_joinir_min.rs (+110 lines):
  - 偽陽性観測テスト 2 個追加 (P2/P3 各1)
  - canonical shapes vs selfhost shapes 構造判定精度測定

- phase49 doc (+200 lines):
  - Phase 54 節完成版
  - 偽陽性分析結果記録
  - name ガード縮小方針明記

- enum 拡張対応:
  - bridge.rs (+8 lines)
  - normalized.rs (+8 lines)
  - ast_lowerer/mod.rs (+2 lines)

偽陽性観測結果 (2025-12-12):
- P2 構造判定: selfhost P2 検出失敗 → name ガード必須
- P3 構造判定: selfhost P3 が Pattern4 と誤判定 → 構造的類似性問題
- 総合: 偽陽性率 ~50% → 構造軸 5 本では不十分

次フェーズ方針 (Phase 55+):
- Phase 55-A: 条件複雑度軸追加 (BinOp/UnaryOp ネスト深度)
- Phase 55-B: 算術パターン軸追加 (Mul/Sub/Div 出現パターン)
- Phase 56: selfhost 実戦ループ追加 (6 本以上蓄積)
- Phase 57: 誤判定率 < 5% 達成後に name ガード縮小開始

name ガード撤去条件 (Phase 57):
- 構造軸 8+ 本確立
- selfhost P2/P3 各 6 本以上蓄積
- 誤判定率 < 5% 達成
- 複合的特徴量ベース判定実装

回帰テスト:  939 PASS, 0 FAIL (既存挙動不変)

Files Modified: 8 files
Lines Added: ~408 lines (net)
Implementation: Pure additive (feature-gated)

Phase 54 完了!構造軸育成・偽陽性観測基盤確立!
2025-12-12 17:12:58 +09:00
7b0db59100 feat(joinir): Phase 53 - SELFHOST-NORM-DEV-EXPAND implementation
Expanded selfhost dev Normalized target with 2 practical P2/P3 loop variations,
strengthened structural signature axis, and implemented two-stage detection.

Key Changes:

1. Documentation (phase49-selfhost-joinir-depth2-design.md +128 lines):
   - Added Phase 53 section with candidate selection rationale
   - Documented two-stage detector strategy (structural primary + dev-only name guard)
   - Defined structural axis strengthening (carrier count/type, branch patterns)

2. Fixtures (+210 lines):
   - selfhost_args_parse_p2.program.json (60 lines): P2 with String carrier + conditional branching
   - selfhost_stmt_count_p3.program.json (150 lines): P3 with 5 carriers + multi-branch if-else

3. Structured Builders (fixtures.rs +48 lines):
   - build_selfhost_args_parse_p2_structured_for_normalized_dev()
   - build_selfhost_stmt_count_p3_structured_for_normalized_dev()

4. ShapeGuard Two-Stage Detection (shape_guard.rs +80 lines):
   - Added SelfhostArgsParseP2/SelfhostStmtCountP3 to NormalizedDevShape enum
   - Implemented is_selfhost_args_parse_p2(): P2 core family + name guard
   - Implemented is_selfhost_stmt_count_p3(): 2-10 carrier check + name guard
   - Updated capability_for_shape() mappings

5. Bridge Integration (bridge.rs +8 lines, normalized.rs +10 lines):
   - Added shape handlers delegating to existing normalizers
   - Added roundtrip reconstruction handlers

6. Entry Point Registration (ast_lowerer/mod.rs +2 lines):
   - Registered selfhost_args_parse_p2/selfhost_stmt_count_p3 as LoopFrontend routes

7. Dev VM Comparison Tests (normalized_joinir_min.rs +40 lines):
   - normalized_selfhost_args_parse_p2_vm_bridge_direct_matches_structured()
   - normalized_selfhost_stmt_count_p3_vm_bridge_direct_matches_structured()

8. Test Context Fix (dev_env.rs):
   - Added thread-local test context depth counter
   - Fixed deadlock in nested test_ctx() calls via reentrant with_dev_env_if_unset()

Structural Axis Growth:

P2 family:
- Carrier count: 1-3 (unchanged)
- NEW: Type diversity (Integer/String mixed)
- NEW: Conditional branching patterns (Eq-heavy comparisons)

P3 family:
- NEW: Carrier count upper bound: 2-10 (was 2-4)
- NEW: Multi-branch if-else (5+ branches with nested structure)
- NEW: Complex conditional patterns

Test Results:
- normalized_dev: 40/40 PASS (including 2 new tests)
- lib regression: 939 PASS, 56 ignored
- Existing behavior unchanged (normalized_dev feature-gated)

Phase 53 Achievements:
 P2/P3 each gained 1 practical variation (2 total)
 Two-stage detection: structural primary + dev-only name guard
 Structural axis expanded: 4 axes (carrier count/type/Compare/branch patterns)
 All tests PASS, no regressions
 Test context deadlock fixed (0.04s for 29 tests)

Files Modified: 14 files
Lines Added: ~516 lines (net)
Implementation: Pure additive (feature-gated)

Next Phase (54+):
- Accumulate 6+ loops per P2/P3 family
- Achieve 5+ stable structural axes
- Target < 5% false positive rate
- Then shrink/remove name guard scope
2025-12-12 16:40:20 +09:00
386cbc1915 Phase47-B/C: extend P3 normalized shapes and quiet dev warnings 2025-12-12 07:13:34 +09:00
7200309cc3 feat(joinir): Phase 48-A - P4 (continue) Normalized minimal implementation
Pattern4 (continue) integration into Normalized JoinIR pipeline complete.

Key changes:
- P4 minimal fixture: skip i==2 pattern, single carrier (acc)
- ShapeGuard: Pattern4ContinueMinimal detector (structure-based)
- StepScheduleBox: ContinueCheck step (eval order: HeaderCond → ContinueCheck → Updates → Tail)
- normalize_pattern4_continue_minimal(): Delegates to P2 (95% infrastructure reuse)
- Tests: 4 integration tests (normalization/runner/VM Bridge comparison×2)

Design validation:
- P4 (continue) = reverse control flow of P2 (break)
- Same loop_step(env, k_exit) skeleton
- Same EnvLayout/ConditionEnv/CarrierInfo infrastructure
- Only difference: evaluation order and control flow direction

Architecture proof:
- Normalized JoinIR successfully handles P1/P2/P3/P4 uniformly
- Infrastructure reuse rate: 95%+ as designed

Tests: 939/939 PASS (+1 from baseline 938, target exceeded!)

Files modified: 10 files (~305 lines added, pure additive)
- pattern4_continue_min.program.json (NEW +126 lines) - P4 fixture
- fixtures.rs (+31 lines) - P4 fixture loader
- shape_guard.rs (+60 lines) - Shape detection
- step_schedule.rs (+18 lines) - Schedule + test
- normalized.rs (+35 lines) - Normalization function
- loop_with_break_minimal.rs (+4 lines) - ContinueCheck handler
- bridge.rs (+5 lines) - VM bridge routing
- ast_lowerer/mod.rs (+2 lines) - Function registration
- normalized_joinir_min.rs (+84 lines) - Integration tests
- CURRENT_TASK.md (+13 lines) - Phase 48-A completion

Next steps:
- Phase 48-B: Extended P4 (multi-carrier, complex continue)
- Phase 48-C: Canonical promotion (always use Normalized for P4)
2025-12-12 06:31:13 +09:00
99bdf93dfe feat(joinir): Phase 47-A-LOWERING - P3 Normalized→MIR(direct)
Implement full Pattern3 (if-sum) Normalized→MIR(direct) support, completing
the P3 minimal implementation.

Key changes:

1. P3 Shape Detection (shape_guard.rs):
   - Implemented is_pattern3_if_sum_minimal() with structure-based detection
   - Detects P3 characteristics:
     - Has Compare instruction (loop condition)
     - Has Select instruction (conditional carrier update)
     - Has tail call (Call with k_next: None)
     - Reasonable param count (2-4 for i, sum carriers)
   - Handles both JoinInst::Select and Compute(MirLikeInst::Select)
   - Added unit test: test_detect_pattern3_if_sum_minimal_shape 

2. P3 Normalization Function (normalized.rs):
   - Implemented normalize_pattern3_if_sum_minimal()
   - Guards: Validates Structured JoinIR + P3 shape detection
   - Phase 47-A minimal: Delegates to P2 normalization (works for simple cases)
   - Updated normalized_dev_roundtrip_structured() integration
   - Returns Result<NormalizedModule, String> for proper error handling

3. Bridge Integration (bridge.rs):
   - Updated normalize_for_shape() to call P3 normalization
   - No changes needed to direct.rs (already handles P3 instructions)

4. Integration Tests (normalized_joinir_min.rs):
   - Added test_phase47a_pattern3_if_sum_minimal_normalization
     - Tests Structured→Normalized transformation
     - Verifies shape detection + normalization succeeds
     - Validates function count and phase correctness
   - Added test_phase47a_pattern3_if_sum_minimal_runner
     - Basic smoke test for P3 fixture validity
     - Verifies 3-function structure and entry point

Benefits:
- P3 now uses Normalized→MIR(direct) pipeline (same as P1/P2)
- Structure-based detection (no name-based heuristics)
- Minimal implementation (delegates to P2 for simplicity)
- Pure additive (no P1/P2 behavioral changes)

Tests: 938/938 PASS (lib), shape_guard P3 test PASS
- test_detect_pattern3_if_sum_minimal_shape 
- test_phase47a_pattern3_if_sum_minimal_normalization 
- test_phase47a_pattern3_if_sum_minimal_runner 

Next phase: Phase 47-B (proper P3-specific normalization, array_filter, multi-carrier)

Design note: This minimal implementation reuses P2 normalization for simplicity.
Proper P3-specific normalization (IfCond, ThenUpdates, ElseUpdates step sequence)
will be implemented in Phase 47-B when needed for more complex P3 patterns.
2025-12-12 05:53:23 +09:00
c3a26e705e feat(joinir): Phase 47-A-IMPL - P3 Normalized infrastructure
Implement Pattern3 (if-sum) Normalized infrastructure, extending existing P2
StepSchedule and ShapeGuard systems.

Key changes:

1. StepSchedule generalization (P2 → P2/P3):
   - Renamed: pattern2_step_schedule.rs → step_schedule.rs
   - Extended StepKind enum with P3 variants:
     - IfCond (if condition in body)
     - ThenUpdates (carrier updates in then branch)
     - ElseUpdates (carrier updates in else branch)
   - Added pattern3_if_sum_schedule() function
   - Added unit test: test_pattern3_if_sum_schedule()
   - Updated module references (mod.rs, loop_with_break_minimal.rs)

2. ShapeGuard extension:
   - Added Pattern3IfSumMinimal variant to NormalizedDevShape
   - Added is_pattern3_if_sum_minimal() detector (placeholder)
   - Updated shape detector table
   - Extended capability_for_shape() mapping

3. Bridge integration:
   - bridge.rs: Added P3 shape handling in normalize_for_shape()
   - normalized.rs: Added P3 roundtrip match (uses P2 temporarily)

4. P2/P3 separation:
   - loop_with_break_minimal.rs: Added panic for P3 steps in P2 lowering
   - Clear boundary enforcement (P2 lowerer rejects P3 steps)

5. Documentation:
   - CURRENT_TASK.md: Phase 47-A-IMPL status
   - phase47-norm-p3-design.md: Implementation status section

Benefits:
- Reuses 90% of P2 infrastructure (ConditionEnv, CarrierInfo, ExitLine)
- Clean P2/P3 separation via StepKind
- Pure additive changes (no P2 behavioral changes)
- Ready for Phase 47-A-LOWERING (full P3 Normalized implementation)

Tests: 938/938 PASS (+1 from step_schedule unit test)
- All existing P1/P2 tests pass (no regressions)
- P3 test uses Structured path temporarily (proper lowering in next phase)

Next phase: Implement full P3 Normalized→MIR(direct) lowering
2025-12-12 05:23:18 +09:00
d4b9ae3ba5 feat(joinir): Phase 46 - P2-Mid canonical Normalized promotion
Promote P2-Mid patterns (_atoi real, _parse_number real) to canonical
Normalized→MIR(direct) route, completing P2 line transition.

Canonical set expansion (Phase 41 → Phase 46):
- P2-Core: Pattern2Mini, skip_ws mini/real, atoi mini
- P2-Mid: atoi real, parse_number real (NEW)

All JsonParser P2 loops (_skip_whitespace, _atoi, _parse_number) now
canonical Normalized - Structured→MIR is legacy/comparison-only.

Key changes:
- shape_guard.rs: Expanded is_canonical_shape() (+2 patterns)
  - JsonparserAtoiReal
  - JsonparserParseNumberReal
  - Made NormalizedDevShape enum public
- bridge.rs: Updated canonical routing comments (Phase 41 → 46)
- normalized.rs: Made shape_guard module public
- normalized_joinir_min.rs: Added Phase 46 canonical verification test
- phase46-norm-canon-p2-mid.md: Complete design documentation

Out of scope (deferred):
- P3/P4 Normalized support → NORM-P3/NORM-P4 phases
- Selfhost complex loops → separate phases

Benefits:
- Clear P2 boundary: All JsonParser P2 = Normalized canonical
- Infrastructure validation: Phase 43/245B proven production-ready
- Simplified mental model: P2 = Normalized-first, P3/P4 = future

Tests: 937/937 PASS (lib), 20/20 PASS (normalized_dev feature)
Phase 46 test: test_phase46_canonical_set_includes_p2_mid 
2025-12-12 04:40:46 +09:00
879d3ee08e feat(joinir): Phase 45 - JoinIR mode unification
Unified JoinIR routing logic through centralized JoinIrMode enum:

Key changes:
- Added JoinIrMode enum (StructuredOnly / NormalizedDev / NormalizedCanonical)
- Added current_joinir_mode() for centralized mode determination
- Refactored normalized_dev_enabled() as thin wrapper over mode enum
- Updated bridge.rs: mode-based routing with canonical P2-Core special handling
- Updated runner.rs: mode pattern matching for dev roundtrip path

Files modified:
- joinir_dev.rs: JoinIrMode enum + current_joinir_mode() (+49 lines)
- bridge.rs: Replaced boolean checks with mode pattern matching (+29 lines)
- runner.rs: Mode-based routing logic (+9 lines)
- CURRENT_TASK.md: Phase 45 implementation summary

Documentation:
- phase45-norm-mode-design.md: Complete design spec and implementation guide

Behavior preservation:
- Canonical P2-Core shapes: always Normalized→MIR(direct) (mode-independent)
- NormalizedDev mode: Structured→Normalized→MIR for supported shapes
- StructuredOnly mode: Structured→MIR direct (default)

Tests: 937/937 PASS (no regression, pure refactor)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 03:31:58 +09:00
ed8e2d3142 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>
2025-12-12 03:15:45 +09:00
12e2f87c6f Refine normalized bridge direct path and env guard 2025-12-11 22:50:23 +09:00
a4756f3ce1 Add dev normalized→MIR bridge for P1/P2 mini and JP _atoi 2025-12-11 22:12:46 +09:00
af6f95cd4b Phase 33 NORM canon test: enforce normalized dev route for P1/P2/JP mini 2025-12-11 20:54:33 +09:00
eb00d97fdb feat(joinir): Phase 246-EX Part 2 - Exit PHI & step scheduling fixes
Phase 246-EX Part 2 completes the _atoi JoinIR integration:

Key fixes:
- Exit PHI connection: ExitLineReconnector now correctly uses exit PHI dsts
- Jump args preservation: BasicBlock.jump_args field stores JoinIR exit values
- instruction_rewriter: Reads jump_args, remaps JoinIR→HOST values by carrier order
- step_schedule.rs: New module for body-local init step ordering

Files changed:
- reconnector.rs: Exit PHI connection improvements
- instruction_rewriter.rs: Jump args reading & carrier value mapping
- loop_with_break_minimal.rs: Refactored step scheduling
- step_schedule.rs: NEW - Step ordering logic extracted

Tests: 931/931 PASS (no regression)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 17:16:10 +09:00
440f8646b1 feat(joinir): Phase 183 LoopBodyLocal role separation + test fixes
Phase 183 Implementation:
- Added is_var_used_in_condition() helper for AST variable detection
- Implemented LoopBodyLocal filtering in TrimLoopLowerer
- Created 4 test files for P1/P2 patterns
- Added 5 unit tests for variable detection

Test Fixes:
- Fixed test_is_outer_scope_variable_pinned (BasicBlockId import)
- Fixed test_pattern2_accepts_loop_param_only (literal node usage)

Refactoring:
- Unified pattern detection documentation
- Consolidated CarrierInfo initialization
- Documented LoopScopeShape construction paths

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-08 23:43:26 +09:00
c183557799 chore: cargo fix - remove unused imports
Phase 33-11 Quick Wins - Task 1

- Removed 10 unused imports across JoinIR lowering modules
- Applied via 'cargo fix --allow-dirty'
- No logic changes, only cleanup
- Build:  Success (0 errors, 44 warnings)

Files modified:
- src/mir/join_ir/lowering/generic_case_a/*.rs (5 files)
- src/mir/join_ir/lowering/{if_merge,if_select,loop_patterns,simple_while_minimal}.rs
- src/mir/join_ir_vm_bridge/joinir_function_converter.rs
- src/mir/builder/control_flow/joinir/merge/exit_line/reconnector.rs
2025-12-07 03:12:51 +09:00
0397df5240 refactor(joinir): Phase 189 - Remove hardcoded 'sum' variable, generalize exit PHI connection
Key improvements:
1. **Eliminate hardcoded variable name**: Replace hardcoded "sum" with generic
   ValueId-based variable_map updates. Add new JoinInlineBoundary constructor
   `new_with_input_and_host_outputs()` for Pattern 3.

2. **Generalize output slot mapping**: Exit PHI result now updates all host_outputs
   entries in variable_map, not just hardcoded "sum". Prepares for future
   multi-carrier patterns.

3. **PHI preservation in blocks**: Fix block finalization to preserve existing
   PHI instructions (from handle_select) instead of overwriting them.

4. **Stable function name→ValueId mapping**: Ensure consistent ValueId
   assignment for tail call detection across multi-function merges.

5. **Enhanced debugging**: Add detailed logging in block converter and meta
   analysis for PHI verification.

Files modified:
- src/mir/builder/control_flow.rs: Remove hardcoded "sum", use boundary outputs
- src/mir/join_ir/lowering/inline_boundary.rs: Add new constructor
- src/mir/join_ir_vm_bridge/joinir_block_converter.rs: Stable mappings, PHI preservation
- src/mir/join_ir_vm_bridge/meta.rs: Debug output for PHI tracking
- src/mir/builder/joinir_id_remapper.rs: PHI value remapping
- src/mir/builder/joinir_inline_boundary_injector.rs: Span preservation

Test status: Pattern 3 (loop_if_phi.hako) still produces correct result (sum=9, RC=9)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: ChatGPT <noreply@openai.com>
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 19:39:54 +09:00
638182a8a2 feat(joinir): Phase 188-Impl-3 Pattern 3 (Loop with If-Else PHI) implementation
Add Pattern 3 lowerer for `loop { if cond { x = a } else { x = b } ... }` pattern.

New files:
- loop_with_if_phi_minimal.rs (381 lines): JoinIR lowerer for Pattern 3
  - Multiple loop variables (counter + accumulator)
  - In-loop if/else PHI using Select instruction
  - Carriers passed to next iteration via tail recursion

Modified files:
- join_ir/mod.rs: Add Mod to BinOpKind, Select to MirLikeInst
- loop_pattern_detection.rs: Add is_loop_with_conditional_phi_pattern() detection
- lowering/mod.rs: Pattern 3 router integration
- loop_patterns.rs: Pattern 3 entry point delegation
- json.rs: Mod/Select JSON serialization
- join_ir_ops.rs: Mod operation evaluation (a % b)
- join_ir_runner.rs: Select instruction execution
- join_ir_vm_bridge/convert.rs: Mod/Select conversion handlers

Implementation:
- Pattern 3 generates 3 JoinIR functions: main, loop_step(i, sum), k_exit(sum_final)
- Exit condition: !(i <= 5) with Jump to k_exit
- In-loop if/else: if (i % 2 == 1) { sum + i } else { sum + 0 }
- Select instruction: sum_new = Select(if_cond, sum_then, sum_else)
- Both carriers updated: Call(loop_step, [i_next, sum_new])

Build status:  Compiles successfully (0 errors, 34 warnings)
Integration: Infrastructure complete, MIR boundary mapping pending

All 3 patterns now have lowering infrastructure in place for Phase 188.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 15:45:42 +09:00
7c55baa818 refactor(joinir): Phase 190 convert.rs modularization
- Created joinir_function_converter.rs (~133 lines): Function-level conversion
- Created joinir_block_converter.rs (~691 lines): Block-level conversion
- Reduced convert.rs from 943 → 120 lines (87% reduction)
- Total: 944 lines (original 943 lines, minimal overhead)
- Separation of concerns: Function vs Block responsibilities
- All handlers moved to block_converter for better organization
- Maintained backward compatibility with existing API
- Build successful, simple tests passing
2025-12-05 14:41:24 +09:00
6d069ba61d feat(joinir): Phase 188 Print instruction + Router integration
- Add MirLikeInst::Print variant for direct output operations
- Implement Print instruction in JSON serialization
- Update simple_while_minimal.rs to use Print instead of BoxCall
- Add Print handling in JoinIR VM bridge and runner
- Add router logic to call Pattern 1 lowerer from main pipeline

Note: Router integration exposes ValueId mismatch issue between
Pattern 1's hardcoded IDs and host function's variables.
This architectural issue needs resolution in next phase.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 12:50:05 +09:00
6a05243f10 feat(joinir): Phase 65-2-B Box コンストラクタ型ヒント実装
Phase 65-2-B 完了:P3-B(Box コンストラクタ)型ヒント実装

## 実装内容

### 1. JoinInst::NewBox に type_hint 追加
- `src/mir/join_ir/mod.rs`: `type_hint: Option<MirType>` フィールド追加
- 段階的拡大のため Optional 設計(既存コード破壊なし)

### 2. expr.rs で型ヒント自動推論
- `infer_box_type()` 関数使用で Box 名から型を自動推論
- ArrayBox → Box("ArrayBox")
- StringBox → String
- MapBox → Box("MapBox")
- IntegerBox → Integer
- BoolBox → Bool

### 3. convert.rs/json.rs で型ヒント対応
- パターンマッチに type_hint 追加(Phase 65-3 で活用予定)
- JSON シリアライズ対応

## テスト結果
-  type_inference モジュール: 8/8 PASS
-  ビルド: 0 エラー

## 次のステップ
- Phase 65-3: lifecycle.rs で P3-A/P3-B 型ヒント統合

---
🌟 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 06:14:52 +09:00
b4b6a01b92 feat(joinir): Phase 65-2-A StringBox メソッド型ヒント実装
Phase 65-2-A 完了:P3-A(StringBox メソッド)型ヒント実装

## 実装内容

### 1. type_inference.rs 新規作成
- `infer_method_return_type()`: StringBox/ArrayBox/MapBox メソッド型推論
- `infer_box_type()`: Box コンストラクタ型推論(Phase 65-2-B 用)
- 8 テスト全て PASS

### 2. JoinInst::MethodCall に type_hint 追加
- `src/mir/join_ir/mod.rs`: `type_hint: Option<MirType>` フィールド追加
- 段階的拡大のため Optional 設計(既存コード破壊なし)

### 3. read_quoted.rs で型ヒント設定
- substring() → String(4箇所)
- length() → Integer(1箇所)
- read_quoted 系関数で完全な型ヒント供給

### 4. 汎用経路は None で後方互換性維持
- expr.rs: 汎用 MethodCall は `type_hint: None`
- convert.rs: 型ヒント追加(Phase 65-3 で活用予定)
- json.rs: JSON シリアライズ対応

## テスト結果
-  type_inference モジュール: 8/8 PASS
-  ビルド: 0 エラー

## 次のステップ
- Phase 65-2-B: Box コンストラクタ型ヒント実装

---
🌟 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 06:10:58 +09:00
c6edbaaf3a feat(mir): Phase 63-6-1/2 MIR Phi type_hint field & JoinIR propagation
Phase 63-6-1: MirInstruction::Phi に type_hint フィールド追加
- Added `type_hint: Option<MirType>` field to Phi instruction
- Updated 21 files with type_hint initialization (all set to None for legacy paths)
- Pattern matching updated across codebase (11 files)
- Test code updated (basic_block.rs)

Phase 63-6-2: JoinIR→MIR Bridge で型ヒント伝播実装
- Modified convert.rs: Select → MIR now creates PHI with type_hint
- Removed Copy instructions from then/else blocks
- PHI instruction at merge block receives type_hint from JoinIR Select
- Test verification:  Type hint propagation successful (Some(Integer))

Modified files:
- instruction.rs: Added type_hint field definition
- join_ir_vm_bridge/convert.rs: Select lowering with PHI + type_hint
- 19 other files: type_hint field initialization

Test results:
-  test_type_hint_propagation_simple: Type hint = Some(Integer) confirmed
-  7/8 if_select tests passing (1 race condition, passes individually)

Next: Phase 63-6-3 (lifecycle.rs で型ヒント使用)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 04:35:40 +09:00