def AmlT.encode

bend-osdev-acpi@0.1.1.0 · aml_term.bend:83

import bend-osdev-acpi@0.1.1.0/aml_term.bend as AmlTerm
import Base
import bend-osdev-bytes@0.1.1.0/bytes.bend as B
import bend-osdev-acpi@0.1.1.0/aml_pkglength.bend as K

83# a term list; every term's operands and body are sublists, so this is one
84# structural recursion
85def AmlT.encode(ts: List<&2, AmlTerm>) -> B.Octets:
86  match ts:
87    case Nil{}:
88      B.Octets.empty()
89    case Con{t, rest}:
90      match t:
91        case AmlTInt{v}:
92          B.Octets.append(tm.int(v), AmlT.encode(rest))
93        case AmlTStr{s}:
94          B.Octets.append(tm.str(s), AmlT.encode(rest))
95        case AmlTRaw{bs}:
96          B.Octets.append(bs, AmlT.encode(rest))
97        case AmlTOp{c, args}:
98          B.Octets.concat([c, AmlT.encode(args), AmlT.encode(rest)])
99        case AmlTPkg{c, h, body}:
100          B.Octets.concat([c, K.AmlPkgLength.wrap(B.Octets.append(h, AmlT.encode(body))), AmlT.encode(rest)])

Uses (9)

Used by (5)