From 1e5c146a879732406767a5508ffc61cc856abca7 Mon Sep 17 00:00:00 2001 From: nyash-codex Date: Sat, 8 Nov 2025 01:32:02 +0900 Subject: [PATCH] =?UTF-8?q?C=E3=83=95=E3=82=A7=E3=83=BC=E3=82=BA=E5=AE=8C?= =?UTF-8?q?=E4=BA=86:=20AST=E5=84=AA=E5=85=88=E3=83=AB=E3=83=BC=E3=83=88?= =?UTF-8?q?=E5=AE=89=E5=AE=9A=E5=8C=96=20+=20MapBox.get()=E5=8F=82?= =?UTF-8?q?=E7=85=A7=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - MapBox.get(): ArrayBox/MapBoxでshare_box()を返すよう修正 - local変数経由のpush操作で参照が正しく保持される - analysis_consumer.hako: method_spans初期化追加 - 未初期化キーによる[map/missing]エラーを防止 - local変数経由push(methods_arr, spans)で安全な操作確保 - ASTキー両受け(boxes/uses後方互換) - parser_core.hako: コード整形(可読性改善) ベースラインテスト: HC011・HC016 ✅ all green 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/boxes/map_box.rs | 7 +++++++ tools/hako_check/analysis_consumer.hako | 17 +++++++++++------ tools/hako_parser/parser_core.hako | 14 ++++++++++---- 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/boxes/map_box.rs b/src/boxes/map_box.rs index 23d1c637..f5f26aad 100644 --- a/src/boxes/map_box.rs +++ b/src/boxes/map_box.rs @@ -152,6 +152,13 @@ impl MapBox { { return value.share_box(); } + // Share identity for collection boxes to preserve mutability semantics + if value.as_any().downcast_ref::().is_some() { + return value.share_box(); + } + if value.as_any().downcast_ref::().is_some() { + return value.share_box(); + } value.clone_box() } None => Box::new(StringBox::new(&format!("[map/missing] Key not found: {}", key_str))), diff --git a/tools/hako_check/analysis_consumer.hako b/tools/hako_check/analysis_consumer.hako index 496b8966..34529211 100644 --- a/tools/hako_check/analysis_consumer.hako +++ b/tools/hako_check/analysis_consumer.hako @@ -21,6 +21,7 @@ static box HakoAnalysisBuilderBox { ir.set("boxes", new ArrayBox()) ir.set("methods", new ArrayBox()) ir.set("calls", new ArrayBox()) + ir.set("method_spans", new ArrayBox()) ir.set("source", text) local eps = new ArrayBox(); eps.push("Main.main"); eps.push("main"); ir.set("entrypoints", eps) // debug disabled in strict environments @@ -30,11 +31,11 @@ static box HakoAnalysisBuilderBox { local ast = null if no_ast == 0 { ast = HakoParserCoreBox.parse(text) } if ast != null { - // uses - local uses = ast.get("uses") + // uses (with fallback for backward compat) + local uses = ast.get("uses"); if uses == null { uses = ast.get("uses_arr") } if uses != null { local ui=0; while ui 0 {