def next.go
emerging-ezjson@1.3.0.0 · src/pull.bend:1451
import emerging-ezjson@1.3.0.0/src/pull.bend as Pull
import Base
import emerging-ezjson@1.3.0.0/src/lex.bend as Lex
1451
1452
1453
1454
1455def next.go(fuel: Nat, txt: String, st: St) -> Out:
1456 match fuel txt st:
1457 case n any S{MDone{stop, saved}, stack, goal, done, bad}:
1458 Fin{(stop, Cur{saved, stack, done, bad})}
1459 case n txt S{MRest{stop}, stack, goal, done, bad}:
1460 Fin{(stop, Cur{txt, stack, done, bad})}
1461 case 0n any S{mode, stack, goal, done, bad}:
1462 More{any, S{mode, stack, goal, done, bad}}
1463 case 1n+left any S{MJump{rest, mode}, stack, goal, done, bad}:
1464 next.go(left, rest, S{mode, stack, goal, done, bad})
1465 case 1n+left SNil{} S{MQuote{}, stack, goal, done, bad}:
1466 Fin{bad.cur()}
1467 case 1n+left SCon{ch, tl} S{MQuote{}, stack, goal, done, True{}}:
1468 next.go(1n+left, tl, err.st(goal))
1469 case 1n+left SCon{ch, +tl} S{MQuote{}, stack, goal, done, False{}}:
1470 next.go(1n+left, tl, quote.first(ch, tl, stack, goal, done))
1471 case 1n+left SNil{} S{MIdle{}, stack, goal, done, bad}:
1472 Fin{idle.eof(stack, goal, done, bad)}
1473 case 1n+left SCon{ch, tl} S{MIdle{}, stack, goal, done, True{}}:
1474 next.go(1n+left, tl, err.st(goal))
1475 case 1n+left SCon{ch, tl} S{MIdle{}, stack, goal, done, False{}}:
1476 next.go(1n+left, tl, look.plan(ch, stack, goal, done, Lex.classify(ch)))
1477 case 1n+left txt S{MWord{buf, nn, num}, stack, goal, done, bad}:
1478 next.go(left, "", word.burst(txt, buf, nn, num, stack, goal, bad))
1479 case 1n+left SNil{} S{MSpan{cut, nn}, stack, goal, done, bad}:
1480 Fin{bad.cur()}
1481 case 1n+left SCon{ch, tl} S{MSpan{cut, nn}, stack, goal, done, True{}}:
1482 next.go(1n+left, tl, err.st(goal))
1483 case 1n+left SCon{ch, tl} S{MSpan{cut, nn}, stack, goal, done, False{}}:
1484 next.go(1n+left, tl, span.advance(span.kind.of(ch), cut, nn, stack, goal, done))
1485 case 1n+left SNil{} S{MCopy{buf}, stack, goal, done, bad}:
1486 Fin{bad.cur()}
1487 case 1n+left SCon{+ch, +tl} S{MCopy{buf}, stack, goal, done, bad}:
1488 next.go(1n+left, tl, copy.hit(ch, tl, buf, stack, goal, done, bad, Lex.classify(ch),
1489 U32.is_lt(Char.to_u32(ch), 32)))
1490 case 1n+left SNil{} S{MEsc{buf}, stack, goal, done, bad}:
1491 Fin{bad.cur()}
1492 case 1n+left SCon{+ch, +tl} S{MEsc{buf}, stack, goal, done, bad}:
1493 next.go(1n+left, tl, esc.hit(ch, tl, buf, stack, goal, done, bad))
1494 case 1n+left SNil{} S{MUni{left2, acc, buf}, stack, goal, done, bad}:
1495 Fin{bad.cur()}
1496 case 1n+left SCon{+ch, +tl} S{MUni{left2, acc, buf}, stack, goal, done, bad}:
1497 next.go(1n+left, tl, uni.hit(ch, tl, left2, acc, buf, stack, goal, done, bad))
1498 case 1n+left SNil{} S{MHi{hi, buf}, stack, goal, done, bad}:
1499 Fin{bad.cur()}
1500 case 1n+left SCon{ch, tl} S{MHi{hi, buf}, stack, goal, done, bad}:
1501 next.go(1n+left, tl, hi.hit(tl, hi, buf, stack, goal, done, bad, Lex.classify(ch)))
1502 case 1n+left SNil{} S{MHiEsc{hi, buf}, stack, goal, done, bad}:
1503 Fin{bad.cur()}
1504 case 1n+left SCon{+ch, tl} S{MHiEsc{hi, buf}, stack, goal, done, bad}:
1505 next.go(1n+left, tl, hiesc.hit(ch, tl, hi, buf, stack, goal, done, bad))
1506 case 1n+left SNil{} S{MLo{left2, acc, hi, buf}, stack, goal, done, bad}:
1507 Fin{bad.cur()}
1508 case 1n+left SCon{+ch, +tl} S{MLo{left2, acc, hi, buf}, stack, goal, done, bad}:
1509 next.go(1n+left, tl, lo.hit(ch, tl, left2, acc, hi, buf, stack, goal, done, bad))
1510 case 1n+left SNil{} S{MSkStr{}, stack, goal, done, bad}:
1511 Fin{bad.cur()}
1512 case 1n+left SCon{ch, tl} S{MSkStr{}, stack, goal, done, True{}}:
1513 next.go(1n+left, tl, err.st(goal))
1514 case 1n+left SCon{ch, tl} S{MSkStr{}, stack, goal, done, False{}}:
1515 next.go(1n+left, tl, sk.advance(span.kind.of(ch), stack, goal, done))
1516 case 1n+left SNil{} S{MSkEsc{}, stack, goal, done, bad}:
1517 Fin{bad.cur()}
1518 case 1n+left SCon{+ch, tl} S{MSkEsc{}, stack, goal, done, bad}:
1519 next.go(1n+left, tl, sk.esc(ch, tl, stack, goal, done, bad))
1520 case 1n+left SNil{} S{MSkUni{left2, acc}, stack, goal, done, bad}:
1521 Fin{bad.cur()}
1522 case 1n+left SCon{+ch, tl} S{MSkUni{left2, acc}, stack, goal, done, bad}:
1523 next.go(1n+left, tl, sk.uni(ch, tl, left2, acc, stack, goal, done, bad))
1524 case 1n+left SNil{} S{MSkHi{hi}, stack, goal, done, bad}:
1525 Fin{bad.cur()}
1526 case 1n+left SCon{ch, tl} S{MSkHi{hi}, stack, goal, done, bad}:
1527 next.go(1n+left, tl, sk.hi(stack, goal, done, hi, Lex.classify(ch)))
1528 case 1n+left SNil{} S{MSkHiEsc{hi}, stack, goal, done, bad}:
1529 Fin{bad.cur()}
1530 case 1n+left SCon{+ch, tl} S{MSkHiEsc{hi}, stack, goal, done, bad}:
1531 next.go(1n+left, tl, sk.hiesc(stack, goal, done, hi, U32.is_eq(Char.to_u32(ch), 117)))
1532 case 1n+left SNil{} S{MSkLo{left2, acc, hi}, stack, goal, done, bad}:
1533 Fin{bad.cur()}
1534 case 1n+left SCon{+ch, tl} S{MSkLo{left2, acc, hi}, stack, goal, done, bad}:
1535 next.go(1n+left, tl, sk.lo.go(ch, tl, left2, acc, hi, stack, goal, done,
1536 Lex.hex.ok(Char.to_u32(ch))))