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
6ecd8f7f52
feat(runtime): Phase 103 CoreServices Optional化 - Memory Constraints対応
...
- Add CoreServicesConfig struct (from_env, minimal, all_enabled)
- Implement with_core_from_registry_optional() for selective initialization
- Update CoreBoxesImpl fields to Option<Arc<dyn XyzService>>
- Maintain backward compatibility (with_core_from_registry calls all_enabled)
- Add NYASH_CORE_DISABLE_* environment variable support
- ConsoleBox remains mandatory (Graceful Degradation principle)
- Add unit tests for optional initialization
- Update console_println! macro to handle Option type
- Fix direct console.println() calls in vm.rs and selfhost.rs
- Create core_optional_design.md documentation
Note: Phase 104 will extend ConsoleService to be optional as well with
graceful fallback in console_println! macro.
Files modified:
- src/runtime/plugin_host.rs (CoreServicesConfig, with_core_from_registry_optional, tests)
- src/runtime/core_services.rs (CoreBoxesImpl fields → Option type)
- src/runtime/mod.rs (console_println! macro updated)
- src/runner/modes/vm.rs (handle Option console)
- src/runner/selfhost.rs (handle Option console)
- docs/development/current/main/core_optional_design.md (new)
- docs/development/current/main/ring0-inventory.md (Phase 103 entry)
Test results:
- Build: ✅ Success (0 errors, 7 warnings)
- Unit tests: ✅ 3/3 passed (optional_core_tests)
- Runtime tests: ✅ 63/63 passed
- Smoke tests: ✅ 30/31 passed (1 pre-existing timeout)
2025-12-03 13:59:06 +09:00
7de192aa6b
feat(mir): Phase 69-3 Fix MIR non-determinism with BTreeSet
...
Replace HashSet with BTreeSet for CFG predecessors/successors:
- BasicBlock.predecessors: HashSet → BTreeSet
- BasicBlock.successors: HashSet → BTreeSet
- LoopFormOps.get_block_predecessors(): returns BTreeSet
- BasicBlock.dominates(): takes &[BTreeSet<BasicBlockId>]
This ensures deterministic PHI generation and test stability.
Test results:
- loop_with_continue_and_break tests: now deterministic (3/3 same output)
- loopform tests: 14/14 PASS (no regressions)
- merge_exit_with_classification tests: 3/3 PASS
Technical changes (6 files):
- basic_block.rs: BTreeSet types + new() initialization
- loopform_builder.rs: trait signature + 2 mock implementations
- phi_ops.rs: return type
- json_v0_bridge/loop_.rs: return type
Same pattern as Phase 25.1 (MirFunction.blocks HashMap → BTreeMap).
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-30 09:38:28 +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
447bbec998
refactor(joinir): Split ast_lowerer and join_ir_vm_bridge into modules
...
ast_lowerer.rs → ast_lowerer/ (10 files):
- mod.rs: public surface + entry dispatch
- context.rs: ExtractCtx helpers
- expr.rs: expression-to-JoinIR extraction
- if_return.rs: simple if→Select lowering
- loop_patterns.rs: loop variants (simple/break/continue)
- read_quoted.rs: read_quoted_from lowering (Phase 45-46)
- nested_if.rs: NestedIfMerge lowering
- analysis.rs: loop if-var analysis + metadata helpers
- tests.rs: frontend lowering tests
- README.md: module documentation
join_ir_vm_bridge.rs → join_ir_vm_bridge/ (5 files):
- mod.rs: public surface + shared helpers
- convert.rs: JoinIR→MIR lowering
- runner.rs: VM execution entry (run_joinir_via_vm)
- meta.rs: experimental metadata-aware hooks
- tests.rs: bridge-specific unit tests
- README.md: module documentation
Benefits:
- Clear separation of concerns per pattern
- Easier navigation and maintenance
- Each file has single responsibility
- README documents module boundaries
Co-authored-by: ChatGPT <noreply@openai.com >
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-28 17:42:19 +09:00
da1a5558e5
Normalize passes keep spans and clean warnings
2025-11-24 15:02:51 +09:00
466e636af6
Span trace utilities and runner source hint
2025-11-24 14:17:02 +09:00
f9d100ce01
chore: Phase 25.1 完了 - LoopForm v2/Stage1 CLI/環境変数削減 + Phase 26-D からの変更
...
Phase 25.1 完了成果:
- ✅ LoopForm v2 テスト・ドキュメント・コメント完備
- 4ケース(A/B/C/D)完全テストカバレッジ
- 最小再現ケース作成(SSAバグ調査用)
- SSOT文書作成(loopform_ssot.md)
- 全ソースに [LoopForm] コメントタグ追加
- ✅ Stage-1 CLI デバッグ環境構築
- stage1_cli.hako 実装
- stage1_bridge.rs ブリッジ実装
- デバッグツール作成(stage1_debug.sh/stage1_minimal.sh)
- アーキテクチャ改善提案文書
- ✅ 環境変数削減計画策定
- 25変数の完全調査・分類
- 6段階削減ロードマップ(25→5、80%削減)
- 即時削除可能変数特定(NYASH_CONFIG/NYASH_DEBUG)
Phase 26-D からの累積変更:
- PHI実装改善(ExitPhiBuilder/HeaderPhiBuilder等)
- MIRビルダーリファクタリング
- 型伝播・最適化パス改善
- その他約300ファイルの累積変更
🎯 技術的成果:
- SSAバグ根本原因特定(条件分岐内loop変数変更)
- Region+next_iパターン適用完了(UsingCollectorBox等)
- LoopFormパターン文書化・テスト化完了
- セルフホスティング基盤強化
Co-Authored-By: Claude <noreply@anthropic.com >
Co-Authored-By: ChatGPT <noreply@openai.com >
Co-Authored-By: Task Assistant <task@anthropic.com >
2025-11-21 06:25:17 +09:00
82b6c4e834
Phase 25.1b: VM undefined-value diagnostics and builder SSA helpers
2025-11-17 03:19:03 +09:00
dda65b94b7
Phase 21.7 normalization: optimization pre-work + bench harness expansion
...
- Add opt-in optimizations (defaults OFF)
- Ret purity verifier: NYASH_VERIFY_RET_PURITY=1
- strlen FAST enhancement for const handles
- FAST_INT gate for same-BB SSA optimization
- length cache for string literals in llvmlite
- Expand bench harness (tools/perf/microbench.sh)
- Add branch/call/stringchain/arraymap/chip8/kilo cases
- Auto-calculate ratio vs C reference
- Document in benchmarks/README.md
- Compiler health improvements
- Unify PHI insertion to insert_phi_at_head()
- Add NYASH_LLVM_SKIP_BUILD=1 for build reuse
- Runtime & safety enhancements
- Clarify Rust/Hako ownership boundaries
- Strengthen receiver localization (LocalSSA/pin/after-PHIs)
- Stop excessive PluginInvoke→BoxCall rewrites
- Update CURRENT_TASK.md, docs, and canaries
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-13 16:40:58 +09:00
dc68104fd9
refactor(mir): Phase 6-1 - Add BasicBlock/MirFunction helper methods (foundation for ~50 line reduction)
...
【目的】
JSON v0 Bridge(if_else.rs, try_catch.rs, loop_.rs)で重複するPHI生成・terminator設定パターンを統一するための基礎ヘルパーメソッド追加
【実装内容】
1. BasicBlock::update_phi_input()メソッド追加(17行)
- loop back-edge PHI更新を簡略化
- 手動ループ検索パターンを統一化
- エラーハンドリング統一
2. MirFunction::set_jump_terminator()メソッド追加(14行)
- if/else/loop降下での終端設定を簡略化
- 未終端チェックを内包
- Option処理を統一
3. MirFunction::set_branch_terminator()メソッド追加(15行)
- if/else条件分岐の終端設定を簡略化
- Option処理を統一
【技術的改善】
- **Single Source of Truth**: 終端設定・PHI更新ロジックが一元化
- **エラーハンドリング統一**: Result型で明示的エラー処理
- **箱化**: 関連処理を BasicBlock/MirFunction に箱化
【修正箇所】
- src/mir/basic_block.rs:
- HashMap import追加
- update_phi_input()メソッド追加(17行)
- src/mir/function.rs:
- MirInstruction import追加
- set_jump_terminator()メソッド追加(14行)
- set_branch_terminator()メソッド追加(15行)
【テスト結果】
✅ ビルド成功(0 errors)
✅ userbox_*スモークテスト: 全6テストPASS
【次のフェーズ(Phase 6-2予定)】
これらのヘルパーメソッドを使って以下を簡略化予定:
- loop_.rs: ~10行削減(update_phi_input使用)
- if_else.rs: ~5行削減(set_branch_terminator使用)
- try_catch.rs: ~15行削減(両メソッド使用)
- 合計: ~30行削減見込み
【Phase 15目標への寄与】
- フェーズ1完了(基礎ヘルパー追加)
- フェーズ2準備完了(~150行削減可能な土台確立)
- 箱理論準拠: 「箱にする」「境界を作る」「戻せる」完全実現
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-01 15:15:21 +09:00
79b9d2b32c
fix(mir): edge-copy insertion before terminator - resolve ValueId undefined errors
...
【問題】
Stage-B(JSON v0 Bridge)で「use of undefined value ValueId(...)」エラー発生
- 原因: merge.rs:38-42でedge-copyを終端命令**後**に追加していた
- 結果: Copy命令が到達不能となり、ValueIdが未定義のまま参照される
【根本原因分析】
1. if_else.rs:34で`set_terminator(Jump)`を設定
2. if_else.rs:62で`merge_var_maps()`呼び出し
3. merge.rs:39で`add_instruction(Copy)` ← **ここで終端後に追加!**
4. BasicBlock構造上、terminator設定後のadd_instruction()は到達不能
【修正内容】
1. BasicBlock::add_instruction_before_terminator()メソッド追加
- 終端命令の有無に関わらず、instructions vecに追加
- terminator自体の追加は許可しない(panic)
2. merge_values()でedge-copy挿入方法を変更
- add_instruction() → add_instruction_before_terminator()
- これによりCopyが終端の**前**に配置される
【修正箇所】
- src/mir/basic_block.rs: add_instruction_before_terminator()追加(12行)
- src/runner/json_v0_bridge/lowering/merge.rs: 呼び出し変更(2行)
【テスト結果】
✅ if文PHIテスト: /tmp/phi_simple_if2.nyash → 出力 1
✅ loop文PHIテスト: /tmp/phi_loop_test.nyash → 出力 10
✅ userbox_*スモークテスト: 全6テストPASS
⚠️ Stage-B: namespace conflict未解決のため未確認
(apps/selfhost.vm.* と lang/hakorune.vm.* の競合)
【影響範囲】
- JSON v0 Bridge経路のif/else合流処理
- edge-copy(PHI-off mode)の正しい配置保証
- Builder経路は元々正常動作(影響なし)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-01 14:37:54 +09:00
adbb0201a9
chore(fmt): add legacy stubs and strip trailing whitespace to unblock cargo fmt
2025-09-17 07:43:07 +09:00
840c1b85ef
feat: Fix VM SSA loop execution with proper phi node handling
...
Fixed infinite loop issue in VM by addressing phi node caching problem.
The phi node was caching the initial value and returning it for all
subsequent iterations, preventing loop variable updates.
Changes:
- Created vm_phi.rs module to separate loop execution logic (similar to mir/loop_builder.rs)
- Disabled phi node caching to ensure correct value selection each iteration
- Added LoopExecutor to track block transitions and handle phi nodes properly
- Fixed VM to correctly track previous_block for phi input selection
The VM now correctly executes SSA-form loops with proper variable updates:
- Loop counter increments correctly
- Phi nodes select the right input based on control flow
- Test case now completes successfully (i=1,2,3,4)
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-18 23:36:40 +09:00
ba568f7dfb
Implement Local and TryCatch lowering in MirBuilder
...
Co-authored-by: moe-charm <217100418+moe-charm@users.noreply.github.com >
2025-08-13 07:13:53 +00:00
774e0bb241
🚀 MIR Stage 1 Basic Infrastructure Complete - 20 Instructions + SSA + Effects
...
Co-authored-by: moe-charm <217100418+moe-charm@users.noreply.github.com >
2025-08-12 11:33:48 +00:00