Files
ww/lib/ww/CLAUDE.md

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. export for 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 in cmd/wcc/ww.h are 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.h first for canonical field names and ordering.
  • See selfhost/CLAUDE.md for the wwstage cgen traps to avoid (undersized amalloc).