Hojun-Cho 7c5463c7d9 lib/strings+test: graduate contains to Hare (str|rune)... variadic (#9)
contains(haystack, needle: (str|rune)) -> contains(haystack: str,
needles: (str|rune)...) bool per ref/hare/strings/contains.ha:9.

Body: for-loop over needles.len; inner match (needles[i]) dispatches
byteindex(haystack, s|r); early return true on hit; fall-through
return false. Hare's match-yield + if (matched) return true collapses
naturally given byteindex's (i32|void) shape (Hare uses bytes::contains
-> bool). 0-arg returns false per Hare spec.

Unblocked by: #8 (5ed6293 varargseq per cgcall), #12 (cbf1042 sum-tag
forward), #15 (5609d04 frame-strategy), #16 (d9b0c90 callee_variadic_
param N_DOT). All four landed this session; #9 exercises every
unblocker. The cross-module same-leaf collision with bytes.contains
(non-variadic) is closed by #16's fnparamslookupmod re-routing —
existing 750 sentinel row bytes_strings_contains continues to pass.

contains_cases adds 6 variadic rows (signalled 1600+i): 0-arg,
1-arg str, 1-arg rune, 3-arg mixed (middle hits), 3-arg all-miss,
multibyte mixed (heart-é via 0xE9u32: rune per single-byte lexrune
precedent at hasprefix_cases:115).

Module-header divergence note for contains removed; lib/bytes
whitespace-default note retained for future bytes graduation.

make test 126/126; ww2==ww3==ww4 byte-id holds via 995_self_rebuild.
2026-05-19 05:08:57 +09:00
2026-05-10 01:24:58 +09:00
Description
No description provided
12 MiB
Languages
C 89.4%
Python 7.2%
Makefile 2.3%
Shell 0.8%
Assembly 0.3%