feat(mir): Phase 21.7 Step 1-2 - NamingBox decode & Hotfix 7修正
## 実装内容 ### Step 1: NamingBox decode関数追加 (naming.rs) - ✅ `decode_static_method(func_name) -> Option<(box, method, arity)>` - ✅ `is_static_method_name(func_name) -> bool` - 対称性: encode ⇔ decode のペア実装で一貫性確保 ### Step 2: unified_emitter Hotfix 7修正 (Lines 267-304) - ✅ StaticCompiler box kind判定追加 - ✅ static box method は receiver 追加をスキップ - ✅ instance method(RuntimeData/UserDefined)のみ receiver 追加 - ✅ トレース: NYASH_STATIC_METHOD_TRACE=1 でログ出力 ## 判定ロジック ```rust if box_kind == CalleeBoxKind::StaticCompiler { // "BoxName.method/arity" 形式か確認 let func_name = format!("{}.{}/{}", box_name, method, args.len()); if is_static_method_name(&func_name) { // static box method → receiver 追加しない } } ``` ## 検証 ✅ Stage-1 テスト: RC=0 (apps/tests/stage1_skip_ws_repro.hako) ✅ ビルド成功(0 error) ## 次のステップ - Step 3: methodization実装 (HAKO_MIR_BUILDER_METHODIZE=1) Co-Authored-By: ChatGPT5 <chatgpt@openai.com>
This commit is contained in:
@ -157,23 +157,40 @@ static box Stage1Cli {
|
||||
// env から直接読み取り、Stage1CliConfigBox は将来の構造化用として温存する。
|
||||
|
||||
// mode 判定(env-only)
|
||||
local mode = "disabled"
|
||||
if env.get("STAGE1_EMIT_PROGRAM_JSON") == "1" {
|
||||
mode = "emit_program_json"
|
||||
} else if env.get("STAGE1_EMIT_MIR_JSON") == "1" {
|
||||
mode = "emit_mir_json"
|
||||
} else if env.get("NYASH_USE_STAGE1_CLI") == "1" {
|
||||
mode = "run"
|
||||
// 新形式(NYASH_STAGE1_MODE)があればそちらを優先し、旧 STAGE1_* はフォールバックとして扱う。
|
||||
local mode = env.get("NYASH_STAGE1_MODE")
|
||||
if mode != null { mode = "" + mode }
|
||||
if mode == null || mode == "" {
|
||||
if env.get("STAGE1_EMIT_PROGRAM_JSON") == "1" {
|
||||
mode = "emit-program"
|
||||
} else if env.get("STAGE1_EMIT_MIR_JSON") == "1" {
|
||||
mode = "emit-mir"
|
||||
} else if env.get("NYASH_USE_STAGE1_CLI") == "1" {
|
||||
mode = "run"
|
||||
} else {
|
||||
mode = "disabled"
|
||||
}
|
||||
}
|
||||
|
||||
// backend と入力まわり
|
||||
local backend = env.get("STAGE1_BACKEND")
|
||||
local backend = env.get("NYASH_STAGE1_BACKEND")
|
||||
if backend == null || backend == "" {
|
||||
backend = env.get("STAGE1_BACKEND")
|
||||
}
|
||||
if backend == null { backend = "vm" }
|
||||
backend = "" + backend
|
||||
|
||||
local source = env.get("STAGE1_SOURCE")
|
||||
local source = env.get("NYASH_STAGE1_INPUT")
|
||||
if source == null || source == "" {
|
||||
source = env.get("STAGE1_SOURCE")
|
||||
}
|
||||
local source_text = env.get("STAGE1_SOURCE_TEXT")
|
||||
local prog_path = env.get("STAGE1_PROGRAM_JSON")
|
||||
local prog_path = env.get("NYASH_STAGE1_PROGRAM_JSON")
|
||||
if prog_path == null || prog_path == "" {
|
||||
prog_path = env.get("STAGE1_PROGRAM_JSON")
|
||||
}
|
||||
|
||||
// デバッグは当面 STAGE1_CLI_DEBUG を優先し、将来 NYASH_DEBUG に統合する。
|
||||
local debug = env.get("STAGE1_CLI_DEBUG")
|
||||
|
||||
// Log entry point for debugging
|
||||
@ -196,7 +213,7 @@ static box Stage1Cli {
|
||||
}
|
||||
|
||||
// Dispatch by mode
|
||||
if mode == "emit_program_json" {
|
||||
if mode == "emit-program" || mode == "emit_program_json" {
|
||||
if source == null || source == "" {
|
||||
if source_text != null && source_text != "" {
|
||||
source = source_text // Fallback to direct text for testing
|
||||
@ -211,7 +228,7 @@ static box Stage1Cli {
|
||||
return 0
|
||||
}
|
||||
|
||||
if mode == "emit_mir_json" {
|
||||
if mode == "emit-mir" || mode == "emit_mir_json" {
|
||||
local prog_json = null
|
||||
if prog_path != null && prog_path != "" {
|
||||
prog_json = me._read_file("[stage1-cli] emit mir-json", prog_path)
|
||||
|
||||
Reference in New Issue
Block a user