Phase 11-12: LLVM backend initial, semantics layer, plugin unification

Major changes:
- LLVM backend initial implementation (compiler.rs, llvm mode)
- Semantics layer integration in interpreter (operators.rs)
- Phase 12 plugin architecture revision (3-layer system)
- Builtin box removal preparation
- MIR instruction set documentation (26→Core-15 migration)
- Cross-backend testing infrastructure
- Await/nowait syntax support

New features:
- LLVM AOT compilation support (--backend llvm)
- Semantics layer for interpreter→VM flow
- Tri-backend smoke tests
- Plugin-only registry mode

Bug fixes:
- Interpreter plugin box arithmetic operations
- Branch test returns incorrect values

Documentation:
- Phase 12 README.md updated with new plugin architecture
- Removed obsolete NYIR proposals
- Added LLVM test programs documentation

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Moe Charm
2025-09-01 23:44:34 +09:00
parent fff9749f47
commit 11506cee3b
196 changed files with 10955 additions and 380 deletions

View File

@ -293,74 +293,30 @@ impl NyashParser {
TokenType::STRING(s) => {
let value = s.clone();
self.advance();
// 🌟 文字列リテラル自動変換: "text" → new StringBox("text")
Ok(ASTNode::New {
class: "StringBox".to_string(),
arguments: vec![ASTNode::Literal {
value: LiteralValue::String(value),
span: Span::unknown(),
}],
type_arguments: vec![],
span: Span::unknown(),
})
// Use plain literal to keep primitives simple in interpreter/VM paths
Ok(ASTNode::Literal { value: LiteralValue::String(value), span: Span::unknown() })
}
TokenType::NUMBER(n) => {
let value = *n;
self.advance();
// 🌟 整数リテラル自動変換: 42 → new IntegerBox(42)
Ok(ASTNode::New {
class: "IntegerBox".to_string(),
arguments: vec![ASTNode::Literal {
value: LiteralValue::Integer(value),
span: Span::unknown(),
}],
type_arguments: vec![],
span: Span::unknown(),
})
Ok(ASTNode::Literal { value: LiteralValue::Integer(value), span: Span::unknown() })
}
TokenType::FLOAT(f) => {
let value = *f;
self.advance();
// 🌟 浮動小数点リテラル自動変換: 3.14 → new FloatBox(3.14)
Ok(ASTNode::New {
class: "FloatBox".to_string(),
arguments: vec![ASTNode::Literal {
value: LiteralValue::Float(value),
span: Span::unknown(),
}],
type_arguments: vec![],
span: Span::unknown(),
})
Ok(ASTNode::Literal { value: LiteralValue::Float(value), span: Span::unknown() })
}
TokenType::TRUE => {
self.advance();
// 🌟 真偽値リテラル自動変換: true → new BoolBox(true)
Ok(ASTNode::New {
class: "BoolBox".to_string(),
arguments: vec![ASTNode::Literal {
value: LiteralValue::Bool(true),
span: Span::unknown(),
}],
type_arguments: vec![],
span: Span::unknown(),
})
Ok(ASTNode::Literal { value: LiteralValue::Bool(true), span: Span::unknown() })
}
TokenType::FALSE => {
self.advance();
// 🌟 真偽値リテラル自動変換: false → new BoolBox(false)
Ok(ASTNode::New {
class: "BoolBox".to_string(),
arguments: vec![ASTNode::Literal {
value: LiteralValue::Bool(false),
span: Span::unknown(),
}],
type_arguments: vec![],
span: Span::unknown(),
})
Ok(ASTNode::Literal { value: LiteralValue::Bool(false), span: Span::unknown() })
}
TokenType::NULL => {