def scan_name

cli@0.2.0.0 · cli.bend:1260

import cli@0.2.0.0/cli.bend as Cli
import Base

1260def scan_name(s: String, +pos: Nat, rev: String,
1261    +first: Bool, dot_start: Nat) -> NameScan:
1262  match s:
1263    case SNil{}:
1264      finish_name(rev, SNil{}, pos, first, dot_start)
1265    case SCon{Chr{32}, tail}:
1266      finish_name(rev, SCon{Char.from_u32(32), tail}, pos, first, dot_start)
1267    case SCon{Chr{91}, tail}:
1268      finish_name(rev, SCon{Char.from_u32(91), tail}, pos, first, dot_start)
1269    case SCon{+h, tail}:
1270      valid = Bool.pick(Bool, first, name_start(h), name_char(h))
1271      next_dot = Bool.pick(Nat, Char.is_eq(h, '.'), dot_start, Nat.add(pos, 1n))
1272      Bool.pick(NameScan, valid,
1273        scan_name(tail, Nat.add(pos, 1n), SCon{h, rev}, False{}, next_dot),
1274        NameBad{pos})

Uses (15)

Used by (2)