Loading repository data…
Loading repository data…
aoughwl / repository
Shared High-Level IR for the idiomatic aowl backends: sem'd IR to a target-neutral HL-IR that the thin aowlts / aowlpy emitters render. The ~85% common to every idiomatic backend, factored out once.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
The shared high-level IR layer for aowl's idiomatic backends. It reads a
sem'd typed NIF (<module>.s.nif, pre-hexer) and exposes it as a small,
target-neutral surface every HL backend consumes: the module-import graph, the
dependency-first initialization order, the routine classification (foreign /
closure), and the grammar walk skeleton (shape decoders for locals, params,
procs, if and case).
The point is that walking and classifying the HL-IR is done once. A backend
imports aowlhl and supplies only the action — the aowli interpreter/VM
evaluates each node; the aowljs emitter prints the equivalent JavaScript — over
the same shapes.
Status: landing. Three modules are live and consumed by two real backends:
aowli(interpreter / VM) — uses the loader (hlload) for module-init order, the classification (hlclassify) for foreign/closure dispatch, and the walk skeleton (hlwalk) forif/case.aowljs(JavaScript emitter) — useshlwalkfor local/param/proc/if/case; output is byte-identical to the hand-navigated emitter it replaced.
📖 Full docs → aoughwl.github.io/docs/aowlhl
| Module | What it shares |
|---|---|
aowlhl/hlload | the user-module import graph + moduleInitOrder (dependency-first init) |
aowlhl/hlclassify | routine-pragma classification — hasImportc / importcName / hasClosure (+ generic hasPragma / pragmaStrArg) |
aowlhl/hlwalk | grammar shape decoders — decodeLocal / decodeParam(s) / decodeProc / decodeIf / decodeCase |
Each decode* takes a Cursor at a node's (, advances it past the whole node,
and returns a shape of captured sub-cursors. Cursors index an immutable token
buffer, so those sub-cursors stay walkable after the node is consumed — the
backend drives evaluation/emission over them in whatever order it needs.
aowlhl is a source library, consumed the way the rest of the stack consumes
sibling checkouts — add -p:/path/to/aowlhl/src at build and import aowlhl/….
It reuses aowl's sem'd-NIF reader and IR libraries via --path; it vendors no
compiler source. See docs/design.md.
Because the semantic model — not surface syntax — is what the HL backends share,
aowlhl is also the home for the deeper lowering the idiomatic TypeScript
and Python emitters need (structured control flow, iterator inlining,
value-copy placement, Option/distinct decisions). That design is captured in
docs/design.md; the modules above are its foundation.