def ent.go

bend-osdev-acpi@0.1.1.0 · entries.bend:58

import bend-osdev-acpi@0.1.1.0/entries.bend as Entries
import Base
import bend-osdev-bytes@0.1.1.0/bytes.bend as B
import bend-osdev-acpi@0.1.1.0/error.bend as E

58# every structure consumes at least 2 bytes, so len(o) steps are enough
59def ent.go(fuel: Nat, nx: AcpiEntNext, +o: B.Octets, +off: Nat, acc: List<&2, AcpiRawEntry>) -> Result<&2, &2, E.AcpiError, List<&2, AcpiRawEntry>>:
60  match fuel:
61    case 0n:
62      Done{ent.rev(acc, Nil{})}
63    case 1n+p:
64      match nx:
65        case AcpiEntEnd{}:
66          Done{ent.rev(acc, Nil{})}
67        case AcpiEntBad{k}:
68          Fail{E.AcpiBadEntry{off, k}}
69        case AcpiEntOk{k, +l}:
70          +rest = B.Octets.drop(l, o)
71          ent.go(p, ent.next(rest), rest, Nat.add(off, l), Con{AcpiRawEntry{k, off, B.Octets.take(l, o)}, acc})

Uses (12)

Used by (1)