Commit Graph

9 Commits

Author SHA1 Message Date
40dfbc68a8 feat(constant): Phase 84-1 Add type annotations for all constant types
Const命令の型アノテーション欠如を根本的に修正。

## 変更内容

5つの emit 関数に型登録を追加:
- emit_integer → MirType::Integer
- emit_bool → MirType::Bool
- emit_float → MirType::Float
- emit_null → MirType::Unknown (Null型が存在しないため)
- emit_void → MirType::Void

emit_string は既に実装済み (Phase 3-A)。

## 成果

- Case D 大幅削減 (詳細は Phase 84 テスト結果で確認)
- 残り 12 件は edge copy / loop break/continue 関連
- Task先生予測の GroupA (Const欠如) を完全解決

## 設計原則

emit_string と同じパターンを踏襲:
```rust
b.value_types.insert(dst, crate::mir::MirType::Integer);
```

## 次のステップ

Phase 84-2: Copy命令型伝播の徹底

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 18:42:21 +09:00
466e636af6 Span trace utilities and runner source hint 2025-11-24 14:17:02 +09:00
eb10fc7159 fix(mir): Phase 25.1 StaticCompiler receiver型推論バグ根治
## 問題
Stage-1ブリッジで `StringHelpers.skip_ws/2` 呼び出し時に:
- ParserBox.length(receiver=ValueId未定義) でVM落ち
- receiver が捏造される(型情報なし)

## 根本原因
1. CalleeResolver: receiver型なし→捏造ValueId生成
2. 順序問題: materialization → guard(逆であるべき)
3. 型注釈不足: String定数・BinOp結果に型情報なし

## 解決策(3 Phase)

### Phase 1: guard.rs Global フォールバック (lines 100-146)
- receiver型なし→Global変換で捏造ValueId防止
- Phase 3-C: 文字列メソッド→StringBox正規化追加

### Phase 2: unified_emitter.rs 順序反転 (lines 176-188)
- guard FIRST → materialization (Method のみ)
- Global 呼び出しの receiver 実体化を回避

### Phase 3-A: emit_string 型注釈 (constant.rs:46-49)
- String定数に value_types + value_origin_newbox 登録

### Phase 3-B: BinOp(Add) 型注釈強化 (ops.rs:70-86,145-166,178-198)
- value_origin_newbox もチェック(value_types のみ→両方)
- 結果も両方のマップに登録

### Phase 3-C: StaticCompiler 文字列メソッド正規化 (guard.rs:106-129)
- length/substring等→StringBox.method に統一
- ParserBox.length → StringBox.length

## 検証
 RC=0 達成(apps/tests/stage1_skip_ws_repro.hako)
 正規化トレース確認(ParserBox→StringBox)
 receiver捏造完全防止

Co-Authored-By: ChatGPT5 <chatgpt@openai.com>
2025-11-21 13:53:50 +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
d3cbc71c9b feat(mir): Phase 25.1f完了 - Conservative PHI + ControlForm観測レイヤー
🎉 Conservative PHI Box理論による完全SSA構築

**Phase 7-B: Conservative PHI実装**
- 片方branchのみ定義変数に対応(emit_void使用)
- 全変数にPHI生成(Conservative Box理論)
- Stage-1 resolver全テスト緑化(3/3 PASS)

**Phase 25.1f: ControlForm観測レイヤー**
- LoopShape/IfShape/ControlForm構造定義
- Loop/If統一インターフェース実装
- debug_dump/debug_validate機能追加
- NYASH_CONTROL_FORM_TRACE環境変数対応

**主な変更**:
- src/mir/builder/phi.rs: Conservative PHI実装
- src/mir/control_form.rs: ControlForm構造(NEW)
- src/mir/loop_builder.rs: LoopForm v2デフォルト化

**テスト結果**:
 mir_stage1_using_resolver_min_fragment_verifies
 mir_stage1_using_resolver_full_collect_entries_verifies
 mir_parserbox_parse_program2_harness_parses_minimal_source

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: ChatGPT <chatgpt@openai.com>
2025-11-18 18:56:35 +09:00
eadde8d1dd fix(mir/builder): use function-local ValueId throughout MIR builder
Phase 25.1b: Complete SSA fix - eliminate all global ValueId usage in function contexts.

Root cause: ~75 locations throughout MIR builder were using global value
generator (self.value_gen.next()) instead of function-local allocator
(f.next_value_id()), causing SSA verification failures and runtime
"use of undefined value" errors.

Solution:
- Added next_value_id() helper that automatically chooses correct allocator
- Fixed 19 files with ~75 occurrences of ValueId allocation
- All function-context allocations now use function-local IDs

Files modified:
- src/mir/builder/utils.rs: Added next_value_id() helper, fixed 8 locations
- src/mir/builder/builder_calls.rs: 17 fixes
- src/mir/builder/ops.rs: 8 fixes
- src/mir/builder/stmts.rs: 7 fixes
- src/mir/builder/emission/constant.rs: 6 fixes
- src/mir/builder/rewrite/*.rs: 10 fixes
- + 13 other files

Verification:
- cargo build --release: SUCCESS
- Simple tests with NYASH_VM_VERIFY_MIR=1: Zero undefined errors
- Multi-parameter static methods: All working

Known remaining: ValueId(22) in Stage-B (separate issue to investigate)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 00:48:18 +09:00
35842503e6 fix(mir/builder): use function-local ValueId for params and constants
Phase 25.1b: Resolve 'Undefined value %0' errors in static methods.

Root cause: Parameters and constants were allocated using global value
generator (self.value_gen.next()) instead of function-local allocator
(f.next_value_id()), causing SSA verification failures.

Fixes:
- src/mir/builder/decls.rs: Use function-local ID for parameter binding
- src/mir/builder/emission/constant.rs: Context-aware constant emission
- src/mir/builder/builder_calls.rs: Function-local param allocation

Verification:
- NYASH_VM_VERIFY_MIR=1: Zero 'Undefined value %0' errors
- Simple test cases: All pass
- Stage-B compiler: %0 errors completely resolved

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 00:35:04 +09:00
0996090d6d ssot(cf): bridge set_branch/set_jump/insert_phi adopted across expr/ternary/match/try_catch/loop; builder emission compare/branch/jump delegate to cf_common; add canaries (ternary/match); docs: note cf_common adoption 2025-11-04 21:33:09 +09:00
dd65cf7e4c builder+vm: unify method calls via emit_unified_call; add RouterPolicy trace; finalize LocalSSA/BlockSchedule guards; docs + selfhost quickstart
- Unify standard method calls to emit_unified_call; route via RouterPolicy and apply rewrite::{special,known} at a single entry.\n- Stabilize emit-time invariants: LocalSSA finalize + BlockSchedule PHI→Copy→Call ordering; metadata propagation on copies.\n- Known rewrite default ON (userbox only, strict guards) with opt-out flag NYASH_REWRITE_KNOWN_DEFAULT=0.\n- Expand TypeAnnotation whitelist (is_digit_char/is_hex_digit_char/is_alpha_char/Map.has).\n- Docs: unified-method-resolution design note; Quick Reference normalization note; selfhosting/quickstart.\n- Tools: add tools/selfhost_smoke.sh (dev-only).\n- Keep behavior unchanged for Unknown/core/user-instance via BoxCall fallback; all tests green (quick/integration).
2025-09-28 20:38:09 +09:00