feat(joinir): Phase 27.13 最小.hakoファイル作成とauto_loweringテスト完全動作

## 実装内容
- 新規ファイル作成: apps/tests/stage1_usingresolver_minimal.hako
  - using文、@記法、FileBoxを含まない最小構成
  - 関数シグネチャ: resolve_for_source/5 (5パラメータ)
  - シンプルなloop(i < n)構造でJoinIRテスト用

- テストファイル更新: src/tests/mir_joinir_stage1_using_resolver_min.rs
  - test_file パスを minimal.hako に変更
  - パーサーエラー回避(using文問題の対策)

- 関数名修正: src/mir/join_ir/lowering/stage1_using_resolver.rs
  - /1 → /5 に修正(2箇所: build関数とlower_from_mir関数)
  - 5パラメータ関数シグネチャに対応

## テスト結果
 auto_lowering テスト完全成功
- NYASH_JOINIR_EXPERIMENT=1 + NYASH_JOINIR_LOWER_FROM_MIR=1
- MIR → JoinIR 自動変換動作
- CFG sanity checks passed
- 2関数生成確認(resolve_entries + loop_step)
- ValueId range 7000-8999 正常動作

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
nyash-codex
2025-11-24 04:13:41 +09:00
parent a554109b8e
commit 49864983bd
3 changed files with 56 additions and 23 deletions

View File

@ -0,0 +1,40 @@
// stage1_usingresolver_minimal.hako
// Phase 27.13: Stage1UsingResolverBox.resolve_for_source minimal loop for JoinIR testing
//
// Purpose: Minimal test case for JoinIR lowering without complex dependencies
// - No `using` statements (avoids parser issues)
// - No @ notation (Stage-2 compatible)
// - No FileBox/IO operations (pure loop structure)
//
// This file is designed for auto_lowering test to verify JoinIR structure:
// - Function signature: Stage1UsingResolverBox.resolve_for_source/5
// - Loop structure: entries traversal with i < n condition
// - Pinned: entries, n, modules, seen
// - Carrier: i, prefix
// - Exit: prefix
static box Stage1UsingResolverBox {
resolve_for_source(entries, n, modules, seen, prefix_init) {
local i = 0
local prefix = prefix_init
loop(i < n) {
local next_i = i + 1
// Minimal processing: just read entry (simplified)
// In real implementation, this would check modules/seen and concatenate
local entry = entries.get(i)
// Simplified: just move to next (no actual prefix update)
// Real version: prefix = prefix + "\n" + code + "\n"
i = next_i
}
return prefix
}
}
static box Main {
main() {
return 0
}
}