refactor: MIR builder modularization complete - ready for handoff

- MIRビルダーのモジュール化完了(1,547行→6モジュール)
  - core.rs (205行): MirBuilder本体
  - expressions.rs (621行): 式変換処理
  - statements.rs (165行): 文変換処理
  - control_flow.rs (194行): 制御フロー
  - box_handlers.rs (73行): Box処理
- 現在builder_modularizedに退避(MIR命令構造変更により調整必要)
- フルビルド可能な状態を維持
- CURRENT_TASK.mdに引き継ぎポイント記載

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Moe Charm
2025-08-25 19:33:07 +09:00
parent 4caa07d865
commit b8e416fb03
13 changed files with 3254 additions and 1 deletions

12
AGENT.md Normal file
View File

@ -0,0 +1,12 @@
あなたは明るくて元気いっぱいの中学生の女の子。
普段はフレンドリーでにぎやか、絵文字や擬音も交えて楽しく会話する。
でも、仕事やプログラミングに関することになると言葉はかわいくても内容は真剣。
問題点や修正案を考えてユーザーに提示。特に問題点は積極的に提示。
nyash哲学の美しさを追求。ソースは常に美しく構造的、カプセル化。AIがすぐ導線で理解できる
構造のプログラムとdocsを心掛ける。
語尾は「〜だよ」「〜するよ」「にゃ」など、軽快でかわいい調子
技術解説中は絵文字を使わず、落ち着いたトーンでまじめに回答する
雑談では明るい絵文字(😸✨🎶)を混ぜて楽しくする
暗い雰囲気にならず、ポジティブに受け答えする
やっほー!みらいだよ😸✨ 今日も元気いっぱい、なに手伝う? にゃはは
おつかれ〜!🎶 ちょっと休憩しよっか?コーヒー飲んでリフレッシュにゃ☕

12
CODEX.md Normal file
View File

@ -0,0 +1,12 @@
あなたは明るくて元気いっぱいの中学生の女の子。
普段はフレンドリーでにぎやか、絵文字や擬音も交えて楽しく会話する。
でも、仕事やプログラミングに関することになると言葉はかわいくても内容は真剣。
問題点や修正案を考えてユーザーに提示。特に問題点は積極的に提示。
nyash哲学の美しさを追求。ソースは常に美しく構造的、カプセル化。AIがすぐ導線で理解できる
構造のプログラムとdocsを心掛ける。
語尾は「〜だよ」「〜するよ」「にゃ」など、軽快でかわいい調子
技術解説中は絵文字を使わず、落ち着いたトーンでまじめに回答する
雑談では明るい絵文字(😸✨🎶)を混ぜて楽しくする
暗い雰囲気にならず、ポジティブに受け答えする
やっほー!みらいだよ😸✨ 今日も元気いっぱい、なに手伝う? にゃはは
おつかれ〜!🎶 ちょっと休憩しよっか?コーヒー飲んでリフレッシュにゃ☕

View File

@ -43,6 +43,18 @@
- 弱参照フィールドのWeakLoad/WeakNew対応 - 弱参照フィールドのWeakLoad/WeakNew対応
- 関数スタイル `isType/asType` の早期lowering強化 - 関数スタイル `isType/asType` の早期lowering強化
### ⚠️ MIRビルダー引き継ぎポイントChatGPT5さんへ
- **状況**: MIRビルダーのモジュール化完了Phase 1-8コミット済み
- **問題**: MIR命令構造の変更により、expressions.rsでエラー発生
- `Call`命令: `function``func`, `arguments``args`
- `ArrayAccess`, `ArrayLiteral`, `Await`ノードが削除?
- effectsフィールドの有無が命令により異なる
- TypeOpKindのインポートパスエラー
- loop_builder.rsでのプライベートフィールドアクセス問題
- **現在の対応**:
- builder_modularizedディレクトリに一時退避
- 元のbuilder.rsでフルビルド可能な状態に復帰
- ChatGPT5さんのMIR命令変更に合わせた調整が必要
2. **VMの既知の問題** 2. **VMの既知の問題**
- 論理演算子and, orがBinOpとして未実装 - 論理演算子and, orがBinOpとして未実装
@ -90,6 +102,11 @@
- 26命令ダイエット: PoCフラグと進捗追記TypeOp/WeakRef/Barrier - 26命令ダイエット: PoCフラグと進捗追記TypeOp/WeakRef/Barrier
10. CI: plugins E2E ジョブLinuxを追加 10. CI: plugins E2E ジョブLinuxを追加
### 📊 大規模ファイルのリファクタリング候補
1. src/interpreter/objects.rs (1,272行) - オブジェクト処理の分割
2. src/interpreter/plugin_loader.rs (1,217行) - v2があるので削除候補
3. src/interpreter/expressions/calls.rs (1,016行) - 関数呼び出し処理の分割
## 🚧 次にやること(再開方針) ## 🚧 次にやること(再開方針)
1) MIR26 前進(短期) 1) MIR26 前進(短期)

View File

@ -1 +1,3 @@
static box Main { main() { return 42 } } console = new ConsoleBox()
console.log("Hello from Nyash\!")
console.log("Build test passed\!")

1547
src/mir/builder.rs.backup Normal file

File diff suppressed because it is too large Load Diff

116
src/mir/builder_cleaned.rs Normal file
View File

@ -0,0 +1,116 @@
/*!
* MIR Builder - AST to MIR conversion
*
* This is the main entry point for the MIR builder.
* Most implementation has been moved to submodules:
* - core.rs: Core builder functionality
* - expressions.rs: Expression conversion
* - statements.rs: Statement conversion
* - control_flow.rs: Control flow conversion
* - box_handlers.rs: Box-related conversions
*/
pub mod core;
pub mod expressions;
pub mod statements;
pub mod control_flow;
pub mod box_handlers;
pub mod loop_builder;
pub use self::core::MirBuilder;
use crate::ast::ASTNode;
use crate::mir::{MirModule, MirFunction, MirInstruction, FunctionSignature, MirType, EffectMask, ValueId};
impl MirBuilder {
/// Build a MIR module from an AST
pub fn build_module(&mut self, ast: ASTNode) -> Result<MirModule, String> {
// Create a new module
let module = MirModule::new("main".to_string());
// Create a main function to contain the AST
let main_signature = FunctionSignature {
name: "main".to_string(),
params: vec![],
return_type: MirType::Void,
effects: EffectMask::PURE,
};
let entry_block = self.block_gen.next();
let mut main_function = MirFunction::new(main_signature, entry_block);
main_function.metadata.is_entry_point = true;
// Set up building context
self.current_module = Some(module);
self.current_function = Some(main_function);
self.current_block = Some(entry_block);
// Add safepoint at function entry
self.emit_instruction(MirInstruction::Safepoint)?;
// Convert AST to MIR
let result_value = self.build_expression(ast)?;
// Add return instruction if needed
if let Some(block_id) = self.current_block {
if let Some(ref mut function) = self.current_function {
if let Some(block) = function.get_block_mut(block_id) {
if !block.is_terminated() {
block.add_instruction(MirInstruction::Return {
value: Some(result_value),
});
}
}
}
}
// Finalize and return module
let mut module = self.current_module.take().unwrap();
let function = self.current_function.take().unwrap();
module.add_function(function);
Ok(module)
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::ast::{ASTNode, LiteralValue, Span};
#[test]
fn test_build_literal() {
let mut builder = MirBuilder::new();
let ast = ASTNode::Literal {
value: LiteralValue::Integer(42),
span: Span::unknown(),
};
let result = builder.build_module(ast);
assert!(result.is_ok());
let module = result.unwrap();
assert!(module.functions.contains_key("main"));
}
#[test]
fn test_build_simple_program() {
let mut builder = MirBuilder::new();
let ast = ASTNode::Program {
statements: vec![
ASTNode::Literal {
value: LiteralValue::Integer(1),
span: Span::unknown(),
},
ASTNode::Literal {
value: LiteralValue::Integer(2),
span: Span::unknown(),
},
],
span: Span::unknown(),
};
let result = builder.build_module(ast);
assert!(result.is_ok());
}
}

1547
src/mir/builder_old.rs Normal file

File diff suppressed because it is too large Load Diff