1.1 KiB
1.1 KiB
lib/ww — frontend in ww (lex, parse, sym, typ, ast). Mirrors cmd/wcc/ (the C bootstrap frontend). Compiled by cmd/w6c against the wwstage cgen.
Style:
- Hare-shaped syntax. Trailing
;.=after fn/type signatures.exportfor visibility. - Plan 9 names: run-together lowercase (
parsefile,lexnext,mksym). No snake_case. No CamelCase. - ww-side type names are lowercase (
node,sym,typ); the C-side equivalents incmd/wcc/ww.hare capitalized (Node,Sym,Type) per Plan 9 cc convention.
This directory is not a Hare-style stdlib module — it's a compiler-frontend port, so structural fidelity to cmd/wcc/ beats Hare API mimicry. The "follow Hare APIs" rule from the root CLAUDE.md applies to peer lib/* modules (fmt, io, bufio, strings, ...), not here.
When porting from cmd/wcc/*.c:
- Keep the same data layout. The selfhost goal is byte-compatible structures so dump/inspect tools work either way.
- Read
cmd/wcc/ww.hfirst for canonical field names and ordering. - See
selfhost/CLAUDE.mdfor the wwstage cgen traps to avoid (undersizedamalloc).