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:
@ -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 => {
|
||||
|
||||
Reference in New Issue
Block a user