feat(phase285w): Phase 285W-Syntax-0.1 - Reject weak(...) syntax (Parser-level Fail-Fast)
- Parser guard: Reject weak(...) with LPAREN check in parse_unary()
- Error: "Use 'weak expr', not 'weak(expr)'" (helpful message)
- Location: src/parser/expressions.rs:248-256
- MIR builder guard: Defense-in-depth for any bypassed cases
- Location: src/mir/builder/calls/build.rs:37-46
- Rejection test: apps/tests/phase285w_weak_call_rejected.hako
- Smoke test: phase285w_weak_call_rejected_vm.sh (PASS ✅)
- Documentation:
- EBNF.md: Add ~ (BitNot) to unary operators
- lifecycle.md: Document weak(expr) as invalid syntax
- phase-285/README.md: Add Phase 285W-Syntax-0.1 entry
Test results: 5/6 phase285 tests PASS (1 unrelated failure)
SSOT: docs/reference/language/lifecycle.md
Closes: Phase 285W-Syntax-0.1
This commit is contained in:
@ -245,6 +245,15 @@ impl NyashParser {
|
||||
// Phase 285W-Syntax-0: weak <expr> unary operator
|
||||
if self.match_token(&TokenType::WEAK) {
|
||||
self.advance(); // consume 'weak'
|
||||
// Phase 285W-Syntax-0.1: Reject weak(...) function call syntax
|
||||
if self.match_token(&TokenType::LPAREN) {
|
||||
let line = self.current_token().line;
|
||||
return Err(ParseError::UnexpectedToken {
|
||||
found: TokenType::LPAREN,
|
||||
expected: "expression after 'weak' unary operator. Use 'weak expr', not 'weak(expr)'".to_string(),
|
||||
line,
|
||||
});
|
||||
}
|
||||
let operand = self.parse_unary()?; // 再帰的に単項演算をパース
|
||||
return Ok(ASTNode::UnaryOp {
|
||||
operator: UnaryOperator::Weak,
|
||||
|
||||
Reference in New Issue
Block a user