Phase 12.7完了 + ChatGPT5によるVMリファクタリング
## 📚 Phase 12.7 ドキュメント整理 - ChatGPT5作成のANCP Token仕様書v1を整備 - フォルダ構造を機能別に再編成: - ancp-specs/ : ANCP圧縮技法仕様 - grammar-specs/ : 文法改革仕様 - implementation/ : 実装計画 - ai-feedback/ : AIアドバイザーフィードバック - 各フォルダにREADME.md作成で導線改善 ## 🔧 ChatGPT5によるVMリファクタリング - vm_instructions.rs (1927行) をモジュール分割: - boxcall.rs : Box呼び出し処理 - call.rs : 関数呼び出し処理 - extern_call.rs : 外部関数処理 - function_new.rs : FunctionBox生成 - newbox.rs : Box生成処理 - plugin_invoke.rs : プラグイン呼び出し - VM実行をファイル分割で整理: - vm_state.rs : 状態管理 - vm_exec.rs : 実行エンジン - vm_control_flow.rs : 制御フロー - vm_gc.rs : GC処理 - plugin_loader_v2もモジュール化 ## ✨ 新機能実装 - FunctionBox呼び出しのVM/MIR統一進捗 - ラムダ式のFunctionBox変換テスト追加 - 関数値の直接呼び出し基盤整備 次ステップ: ANCPプロトタイプ実装開始(Week 1) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
34
src/backend/vm_instructions/function_new.rs
Normal file
34
src/backend/vm_instructions/function_new.rs
Normal file
@ -0,0 +1,34 @@
|
||||
use crate::mir::ValueId;
|
||||
use std::sync::Arc;
|
||||
use crate::backend::vm::ControlFlow;
|
||||
use crate::backend::{VM, VMError, VMValue};
|
||||
|
||||
impl VM {
|
||||
/// Execute FunctionNew instruction (construct a FunctionBox value)
|
||||
pub(crate) fn execute_function_new(
|
||||
&mut self,
|
||||
dst: ValueId,
|
||||
params: &[String],
|
||||
body: &[crate::ast::ASTNode],
|
||||
captures: &[(String, ValueId)],
|
||||
me: &Option<ValueId>,
|
||||
) -> Result<ControlFlow, VMError> {
|
||||
// Build ClosureEnv
|
||||
let mut env = crate::boxes::function_box::ClosureEnv::new();
|
||||
// Add captures by value
|
||||
for (name, vid) in captures.iter() {
|
||||
let v = self.get_value(*vid)?;
|
||||
env.captures.insert(name.clone(), v.to_nyash_box());
|
||||
}
|
||||
// Capture 'me' weakly if provided and is a BoxRef
|
||||
if let Some(m) = me {
|
||||
match self.get_value(*m)? {
|
||||
VMValue::BoxRef(b) => { env.me_value = Some(Arc::downgrade(&b)); }
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
let fun = crate::boxes::function_box::FunctionBox::with_env(params.to_vec(), body.to_vec(), env);
|
||||
self.set_value(dst, VMValue::BoxRef(Arc::new(fun)));
|
||||
Ok(ControlFlow::Continue)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user