30 lines
1.3 KiB
Markdown
30 lines
1.3 KiB
Markdown
|
|
Status: Active
|
|||
|
|
Scope: `StringUtils.is_integer/1`(nested-if + loop)を JoinIR で受理して `--profile quick` を進める。
|
|||
|
|
Related:
|
|||
|
|
- Now: `docs/development/current/main/10-Now.md`
|
|||
|
|
- Phase 258: `docs/development/current/main/phases/phase-258/README.md`
|
|||
|
|
- Design goal: `docs/development/current/main/design/join-explicit-cfg-construction.md`
|
|||
|
|
|
|||
|
|
# Phase 259: `StringUtils.is_integer/1` (nested-if + loop)
|
|||
|
|
|
|||
|
|
## Current Status (SSOT)
|
|||
|
|
|
|||
|
|
- Current first FAIL: `json_lint_vm / StringUtils.is_integer/1`
|
|||
|
|
- Shape summary(ログ由来):
|
|||
|
|
- prelude: nested-if to compute `start` (handles leading `"-"`)
|
|||
|
|
- loop: `loop(i < s.length()) { if not this.is_digit(s.substring(i, i+1)) { return false } i = i + 1 }`
|
|||
|
|
- post: `return true`
|
|||
|
|
- caps: `If,Loop,NestedIf,Return`
|
|||
|
|
|
|||
|
|
## Goal
|
|||
|
|
|
|||
|
|
- `StringUtils.is_integer/1` を JoinIR で受理し、quick の first FAIL を次へ進める
|
|||
|
|
|
|||
|
|
## Proposed Approach (P0)
|
|||
|
|
|
|||
|
|
方針: prelude(nested-if)は既存 lowering のまま、loop 部分だけを scan パターンへ寄せる(構造で解決)。
|
|||
|
|
|
|||
|
|
P0 の狙い:
|
|||
|
|
- loop の core は “scan until mismatch” で、Pattern6(scan)と近い
|
|||
|
|
- ただし return 値が `i/-1` ではなく `true/false` なので、scan パターンの “return payload” を一般化する必要がある可能性がある
|