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