def num.go
lawful-fields@0.1.1.0 · fields.bend:53
import lawful-fields@0.1.1.0/fields.bend as Fields
import Base
import lawful-bytes@0.1.1.0/defs.bend as D
import lawful-bytes@0.1.1.0/bytes.bend as B
53
54
55def num.go(n: Nat, r: D.Bytes & U32, +j: U32, +acc: U32, ok: Bool) -> D.Bytes & Maybe<&2, U32>:
56 match n:
57 case 0n:
58 num.out(acc, ok, r)
59 case 1n+m:
60 (b, +x) = r
61 +d = (x - 48 : U32)
62 +digit = U32.is_ge(x, 48) && U32.is_le(x, 57)
63 +fits = U32.is_lt(acc, 429496729) || (U32.is_eq(acc, 429496729) && U32.is_le(d, 5))
64 num.go(m, B.at(b, (j + 1 : U32)), (j + 1 : U32), ((acc * 10 : U32) + d : U32), ok && (digit && fits))