refactor(json_v0_bridge): Phase 25.1p - FunctionDefBuilder箱化+me予約修正
【変更内容】 1. FunctionDefBuilder 箱化(SSOT化) - インスタンスメソッド判定の一元化 - パラメータ ValueId 生成の統一 - 変数マップ初期化の統一 2. ValueId(0) me 予約バグ修正 - is_instance_method() で box_name != "Main" 判定 - インスタンスメソッドは me を ValueId(0) に予約 - variable_map["me"] = ValueId(0) を自動設定 3. コード削減・可読性向上 - 60行 → 40行(関数定義処理) - 重複ロジック削除 - デバッグログ追加(is_instance表示) 【効果】 - json_v0_bridge 経路の ValueId(0) 未定義エラー解消 - Stage-B compiler で static box メソッドが正しく動作 - 設計の一貫性向上(me の扱いが明確) 【非スコープ】 - Rust MirBuilder 側は未修正(Phase 26で統一予定) - lower_static_method_as_function は現状維持 関連: Phase 25.1m (静的メソッド修正), Phase 25.1c/k (SSA修正) 🐱 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -435,14 +435,21 @@ Status: Step0〜3 実装済み・Step4(Method/Extern)実装フェーズ
|
||||
- `args[0]` の MIR(JSON v0) 文字列を受け取り、ny-llvmc ラッパ (`llvm_codegen::mir_json_to_object`) で object (.o) のパスを返す。
|
||||
|
||||
- Bridge(JSON v0 → MIR)の特別扱い:
|
||||
- `src/runner/json_v0_bridge/lowering/expr.rs`:
|
||||
- `src/runner/json_v0_bridge/lowering/expr.rs` / `lowering.rs`:
|
||||
- `MapVars::resolve`:
|
||||
- `hostbridge` / `env` を特殊変数として扱い、それぞれ Const(String) `"hostbridge"` / `"env"` を生成する(Method チェーンを降ろすためのプレースホルダ)。
|
||||
- `me` については、Bridge 環境の `allow_me_dummy` が ON のときだけ NewBox を注入する(通常は JSON defs 側で明示パラメータとして扱う)。
|
||||
- `lower_expr_with_scope`:
|
||||
- `ExprV0::Extern { iface, method, args }` → `MirInstruction::ExternCall { iface_name, method_name, ... }`。
|
||||
- `ExprV0::Method` の特別ケース:
|
||||
- `ConsoleBox` の `print/println/log` → `ExternCall env.console.log`。
|
||||
- `env.box_introspect.kind(value)` パターン → `ExternCall env.box_introspect.kind` に正規化。
|
||||
- defs 降下(`lowering.rs`):
|
||||
- JSON v0 の `defs` に対して、`box_name != "Main"` の関数を **インスタンスメソッド** とみなし、
|
||||
- `signature.params` に「暗黙 `me` + 明示パラメータ」を載せる。
|
||||
- `func_var_map` に `me` → `func.params[0]` を、残りのパラメータ名を `params[1..]` にバインドする。
|
||||
- これにより Stage‑B / Stage‑1 側で `_build_module_map()` のような「params: [] だが `me` を使う」メソッドでも、
|
||||
Rust VM 実行時に `me` 未定義にならず、BoxCall が正しく解決されるようになった。
|
||||
|
||||
- Selfhost への移植指針(Rust SSOT に沿った箱設計):
|
||||
- `MethodCall`:
|
||||
|
||||
Reference in New Issue
Block a user