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>
This commit is contained in:
@ -71,20 +71,32 @@ impl MirInterpreter {
|
||||
}
|
||||
|
||||
/// Register static box declarations (called from vm.rs during setup)
|
||||
pub fn register_static_box_decl(&mut self, name: String, decl: crate::core::model::BoxDeclaration) {
|
||||
pub fn register_static_box_decl(
|
||||
&mut self,
|
||||
name: String,
|
||||
decl: crate::core::model::BoxDeclaration,
|
||||
) {
|
||||
self.static_box_decls.insert(name, decl);
|
||||
}
|
||||
|
||||
/// Ensure static box singleton instance exists, create if not
|
||||
/// Returns mutable reference to the singleton instance
|
||||
fn ensure_static_box_instance(&mut self, box_name: &str) -> Result<&mut crate::instance_v2::InstanceBox, VMError> {
|
||||
fn ensure_static_box_instance(
|
||||
&mut self,
|
||||
box_name: &str,
|
||||
) -> Result<&mut crate::instance_v2::InstanceBox, VMError> {
|
||||
// Check if instance already exists
|
||||
if !self.static_boxes.contains_key(box_name) {
|
||||
// Get declaration
|
||||
let decl = self.static_box_decls.get(box_name)
|
||||
.ok_or_else(|| VMError::InvalidInstruction(
|
||||
format!("static box declaration not found: {}", box_name)
|
||||
))?
|
||||
let decl = self
|
||||
.static_box_decls
|
||||
.get(box_name)
|
||||
.ok_or_else(|| {
|
||||
VMError::InvalidInstruction(format!(
|
||||
"static box declaration not found: {}",
|
||||
box_name
|
||||
))
|
||||
})?
|
||||
.clone();
|
||||
|
||||
// Create instance from declaration
|
||||
@ -97,15 +109,20 @@ impl MirInterpreter {
|
||||
self.static_boxes.insert(box_name.to_string(), instance);
|
||||
|
||||
if std::env::var("NYASH_VM_STATIC_TRACE").ok().as_deref() == Some("1") {
|
||||
eprintln!("[vm-static] created singleton instance for static box: {}", box_name);
|
||||
eprintln!(
|
||||
"[vm-static] created singleton instance for static box: {}",
|
||||
box_name
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Return mutable reference
|
||||
self.static_boxes.get_mut(box_name)
|
||||
.ok_or_else(|| VMError::InvalidInstruction(
|
||||
format!("static box instance not found after creation: {}", box_name)
|
||||
self.static_boxes.get_mut(box_name).ok_or_else(|| {
|
||||
VMError::InvalidInstruction(format!(
|
||||
"static box instance not found after creation: {}",
|
||||
box_name
|
||||
))
|
||||
})
|
||||
}
|
||||
|
||||
/// Check if a function name represents a static box method
|
||||
@ -169,7 +186,12 @@ impl MirInterpreter {
|
||||
// Build helpful error message
|
||||
let mut names: Vec<&String> = module.functions.keys().collect();
|
||||
names.sort();
|
||||
let avail = names.into_iter().take(12).cloned().collect::<Vec<_>>().join(", ");
|
||||
let avail = names
|
||||
.into_iter()
|
||||
.take(12)
|
||||
.cloned()
|
||||
.collect::<Vec<_>>()
|
||||
.join(", ");
|
||||
let tried = candidates.join(", ");
|
||||
let msg = format!(
|
||||
"entry function not found. searched: [{}]. available: [{}]. hint: define 'static box Main {{ method main(args){{ ... }} }}' or set NYASH_ENTRY=Name",
|
||||
@ -200,9 +222,13 @@ impl MirInterpreter {
|
||||
argv_list = out;
|
||||
}
|
||||
} else if let Ok(s) = std::env::var("NYASH_SCRIPT_ARGS_JSON") {
|
||||
if let Ok(v) = serde_json::from_str::<Vec<String>>(&s) { argv_list = v; }
|
||||
if let Ok(v) = serde_json::from_str::<Vec<String>>(&s) {
|
||||
argv_list = v;
|
||||
}
|
||||
} else if let Ok(s) = std::env::var("NYASH_ARGV") {
|
||||
if let Ok(v) = serde_json::from_str::<Vec<String>>(&s) { argv_list = v; }
|
||||
if let Ok(v) = serde_json::from_str::<Vec<String>>(&s) {
|
||||
argv_list = v;
|
||||
}
|
||||
}
|
||||
// Construct ArrayBox of StringBox
|
||||
let array = crate::boxes::array::ArrayBox::new();
|
||||
|
||||
Reference in New Issue
Block a user