def tokens.hit

emerging-ezjson@1.3.0.0 · src/lex.bend:344

import emerging-ezjson@1.3.0.0/src/lex.bend as Lex
import Base

344def tokens.hit(
345  +ch: Char,
346  tail: String,
347  cut: String,
348  +nn: U32,
349  mode: Span,
350  toks: List<&2, Tok>,
351  cls: Class,
352  ctrl: Bool
353) -> Scan:
354  match mode cls ctrl:
355    case GIdle{} CSpace{} b:
356      Go{cut, nn, GIdle{}, toks}
357    case GIdle{} CPunct{p} b:
358      Go{cut, nn, GIdle{}, p <> toks}
359    case GIdle{} CQuote{} b:
360      Go{tail, 0, GStr{}, toks}
361    case GIdle{} CBack{} b:
362      Go{cut, nn, GBad{}, toks}
363    case GIdle{} COther{} b:
364      Go{SCon{ch, tail}, 1, GWord{}, toks}
365    case GWord{} COther{} b:
366      Go{cut, U32.add(nn, 1), GWord{}, toks}
367    case GWord{} CPunct{p} b:
368      Go{"", 0, GIdle{}, p <> tokens.push(cut, nn, True{}, toks)}
369    case GWord{} CQuote{} b:
370      Go{tail, 0, GStr{}, tokens.push(cut, nn, True{}, toks)}
371    case GWord{} CBack{} b:
372      Go{cut, nn, GBad{}, toks}
373    case GWord{} k b:
374      Go{"", 0, GIdle{}, tokens.push(cut, nn, True{}, toks)}
375    case GStr{} k True{}:
376      Go{cut, nn, GBad{}, toks}
377    case GStr{} CQuote{} False{}:
378      Go{"", 0, GIdle{}, tokens.push(cut, nn, False{}, toks)}
379    case GStr{} CBack{} False{}:
380      Old{feed('\\', Lex{Str{}, tokens.rev(cut, nn, U32.is_zero(nn), []), toks})}
381    case GStr{} k False{}:
382      Go{cut, U32.add(nn, 1), GStr{}, toks}
383    case GBad{} k b:
384      Go{cut, nn, GBad{}, toks}

Uses (16)

Used by (1)