41 lines
900 B
Plaintext
41 lines
900 B
Plaintext
|
|
// loopform_continue_break_scan.hako
|
||
|
|
// 目的: Region+next_i 型の scan ループで continue + break 混在パターンをスモークする
|
||
|
|
|
||
|
|
static box Main {
|
||
|
|
scan(s) {
|
||
|
|
local i = 0
|
||
|
|
local n = s.length()
|
||
|
|
// Case C-ish: constant-true + continue/backedge + break
|
||
|
|
loop(1 == 1) {
|
||
|
|
if i >= n { break }
|
||
|
|
|
||
|
|
// Region+next_i: この周回での「次の i」を 1 箇所に集約
|
||
|
|
local next_i = i
|
||
|
|
local ch = s.substring(i, i + 1)
|
||
|
|
|
||
|
|
if ch == " " {
|
||
|
|
next_i = i + 1
|
||
|
|
i = next_i
|
||
|
|
continue
|
||
|
|
}
|
||
|
|
if ch == "\t" {
|
||
|
|
next_i = i + 2
|
||
|
|
i = next_i
|
||
|
|
continue
|
||
|
|
}
|
||
|
|
// その他の文字で終了
|
||
|
|
break
|
||
|
|
}
|
||
|
|
return i
|
||
|
|
}
|
||
|
|
|
||
|
|
main(args) {
|
||
|
|
// 先頭に space + tab を並べたケースで scan が 3 を返すことを想定
|
||
|
|
local s = " \tX"
|
||
|
|
local r = Main.scan(s)
|
||
|
|
print(r)
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|