docs: Phase 100 P3 string accumulator contract
- Add P3 section to phases/phase-100/README.md - Document allowed form: out = out + ch (Variable RHS only) - List Fail-Fast cases (Literal RHS, MethodCall RHS, non-string-ish) - Add example with length-based output 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -111,3 +111,34 @@ print(out.length()) # Output: 2
|
|||||||
- **P2-4**: Integration test (fixture + smoke, length-based validation)
|
- **P2-4**: Integration test (fixture + smoke, length-based validation)
|
||||||
|
|
||||||
**LLVM EXE parity**: P2 accumulator を LLVM EXE smoke でも固定(phase100_mutable_accumulator_llvm_exe.sh)
|
**LLVM EXE parity**: P2 accumulator を LLVM EXE smoke でも固定(phase100_mutable_accumulator_llvm_exe.sh)
|
||||||
|
|
||||||
|
## P3: String Accumulator (out = out + ch, Variable RHS only)
|
||||||
|
|
||||||
|
**Constraint**: String accumulator は最小形のみサポート。
|
||||||
|
|
||||||
|
**Allowed form**:
|
||||||
|
- `out = out + ch` where ch ∈ {Variable (string-ish)}
|
||||||
|
- RHS must be Variable (not Literal, not MethodCall)
|
||||||
|
|
||||||
|
**Fail-Fast (未対応)**:
|
||||||
|
- Literal RHS: `out = out + "x"` (P3.1 で解禁予定)
|
||||||
|
- MethodCall RHS: `out = out + substring(...)` (P3.2 で解禁予定)
|
||||||
|
- Non-string-ish RHS: 型判定は既存の box facts に委譲
|
||||||
|
|
||||||
|
**Example** (now works):
|
||||||
|
```hako
|
||||||
|
local out = ""
|
||||||
|
local s = "abc"
|
||||||
|
loop(i < 3) {
|
||||||
|
local ch = s.substring(i, i+1) # body-local string 1文字
|
||||||
|
out = out + ch # String accumulator
|
||||||
|
print(out.length()) # Output: 1, 2, 3
|
||||||
|
i = i + 1
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Implementation**:
|
||||||
|
- **P3-1**: AccumulatorKind::{Int, String} 追加(型判定は委譲)
|
||||||
|
- **P3-2**: StringAccumulatorEmitter 専用箱(JoinIR lowering)
|
||||||
|
- **P3-3**: Pattern2 wiring(string carrier 昇格、emitter 分岐)
|
||||||
|
- **P3-4**: Fixture + smokes(VM + LLVM EXE)
|
||||||
|
|||||||
Reference in New Issue
Block a user