Files
ww/lib/bufio
Hojun-Cho c62e8e5560 lib/bufio: add Option C parallel vstream API (#94 fold-e4)
Adds bufio_vstream + isbuffered_v alongside the pre-vtable
bufio.init / bufio.isbuffered surface, mirroring fold-e2's
lib/memio and fold-e3's lib/fmt parallel-API shape. The OLD
bufio.ww surface stays untouched; fold-eFinal (#50) atomically
flips the package shape, drops the `_v` suffix, and retires the
legacy callbacks.

bufio_ctx wraps an underlying *io.stream (OLD API) — bufio_vstream
src parameter type stays *io.stream until io fold-2 lands
`handle = (file | int)` (drew-deferred). vt is the first field
for the intrusive vstream→*bufio_ctx cast, same shape as
memio/fmt vstream wrappers.

Sibling task filed:

  #210  struct-lit slice-typed field silently drops under
        alloc(T{slice = val})?. Parallel to #207 for slice fields;
        scalar/ptr fields in the same alloc-struct-lit populate
        correctly. Workaround: post-alloc field-assign
        c.slicefield = val. Documented inline; drops out on close.

Other deferrals retained inline: #206 cast wrappers (3 vtable
wire-up + 2 isbuffered_v comparand), #173 nomem-widen for the
io.closed → io.error boundary, #207 alloc-zero-chain for vt.

bufio is not embedded in any selfhost combined.ww (test-only);
no Makefile regen needed (#110-blind safe).

test/wcc/778_bufio_vstream_run pins the 5-row scenario set:
write+flush, read+refill, isbuffered_v discriminator, OLD/NEW
boundary check, and a branched-callee #105 row. cs+ww+byte-id
green on all 5 rows.

make test: 211 passed (was 210).
2026-05-29 10:24:02 +09:00
..