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}